栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作:索引,幅值,排序,DataFrame运算,

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作:索引,幅值,排序,DataFrame运算,

目录
  • 1 pandas介绍
    • 1.1 Pandas介绍
    • 1.2 为什么使用Pandas
    • 1.3 案例:在numpy当中创建的股票涨跌幅数据形式
    • 1.4 Dataframe
      • 1.4.1 Dataframe结构
      • 1.4.2 Datatframe的常用属性和方法
      • 1.4.3 Datatframe索引的设置
        • 修改行列索引值
        • 重设索引
    • 1.6 Series结构
      • 1.6.1 创建series
      • 1.6.2 series获取索引和值
    • 1.7 小结
  • 2 基本数据操作
    • 2.1 索引操作
      • 2.1.1 直接使用行列索引(先列后行)
      • 2.1.2 结合loc或者iloc使用索引
      • 2.1.3 使用ix组合索引(已官方弃用)
    • 2.2 赋值操作
    • 2.3 排序
      • Dataframe排序
      • Series
    • 2.4 总结
  • 3 Dataframe运算
    • 3.1 算术运算
    • 3.2 逻辑运算
      • 3.2.1 逻辑运算符号<、 >、|、 &
        • 筛选单个结果
        • 完成多个逻辑判断
      • 3.2.2 逻辑运算函数
    • 3.3 统计运算
      • 3.3.1 describe()
      • 3.3.2 统计函数
    • 3.4 累计统计函数
    • 3.5 自定义运算
      • 案例:定义一个对列,最大值-最小值的函数
  • 4 Pandas画图
    • 4.1 pandas.Dataframe.plot
    • 4.2 pandas.Series.plot
    • 4.5 文件读取与存储
      • 5.1 CSV
      • 5.1.1 读取csv文件-read_csv

1 pandas介绍 1.1 Pandas介绍

面板 数据 (三维数据)分析 计量经济学(数据分析80% 跑计量20%)

  • 以Numpy为基础,借力Numpy模块在计算方面性能高的优势
  • 基于matplotlib,能够简便的画图
  • 独特的数据结构
1.2 为什么使用Pandas
  • 便捷的数据处理能力
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算
1.3 案例:在numpy当中创建的股票涨跌幅数据形式
import numpy as np
import pandas as pd

# 创建一个符合正态分布的10个股票5天的涨跌幅数据
st_change = np.random.normal(0,1,(10,5))
st_change


这样的数据形式很难看到存储的是什么样的数据,并且也很难获取相应的数据,比如需要获取某个指定股票的数据,就很难去获取!!

  • 让数据更有意义的显示
    给股票涨跌幅数据增加行列索引,显示效果更佳
# 使用Pandas中的数据结构
st_change = pd.Dataframe(st_change)
st_change

  • 增加行索引
    错误写法:以下书写的代码可能会出现全Nan值
# 错误
# 构造行索引序列
st_code = ['股票'+str(i) for i in range(st_change.shape[0])]
print(st_code)
# 添加行索引
data = pd.Dataframe(st_change, index=st_code)
data


正确写法:
方法1:对dataframe结构的行索引index直接更改,有可能出问题,取决于赋什么值。以前这样做可以,现在不太推荐了

print(st_change.shape)
print(st_change.shape[0])
print(st_change.shape[1])
# 构造行索引序列
st_code = ['股票'+ str(i) for i in range(st_change.shape[0])]
print(st_code)

# 添加行索引
data = pd.Dataframe(st_change)
data.index = st_code
data


方法2:用rename方法改
df.rename(index={原行索引名:替换行索引名})

待增加
  • 增加列索引
    股票的日期是一个时间的序列,我们要实现从前往后的时间还要考虑每月的总天数等,不方便。使用pd.date_range():用于生成一组连续的时间序列(暂时了解)
date_range(start=None,end=None, periods=None, freq='B')
start:开始时间
end:结束时间
periods:时间天数
freq:递进单位,默认1天,'B'默认略过周末
# 生成一个时间的序列,略过周末非交易日

以下是错误代码,和上面可能出现错误的写法一样,全体nan值

# 生成一个时间的序列,略过周末非交易日
date = pd.date_range('2017-01-01', periods=stock_change.shape[1], freq='B')
# index代表行索引,columns代表列索引
data = pd.Dataframe(stock_change, index=stock_index, columns=date)

正确代码

# 增加列索引
# 股票的日期是一个时间的序列,我们要实现从前往后的时间还要考虑每月的总天数等,不方便。使用
# pd.date_range():用于生成一组连续的时间序列(暂时了解)

# 生成一个时间的序列,略过周末非交易日
date = pd.date_range('2017-01-01',periods=st_change.shape[1],freq='B')

# index代表行索引,columns代表列索引
data = pd.Dataframe(st_change)

data.columns = date

data

1.4 Dataframe 1.4.1 Dataframe结构

Dataframe对象既有行索引,又有列索引

  • 行索引,表明不同行,横向索引,叫index
  • 列索引,表名不同列,纵向索引,叫columns
1.4.2 Datatframe的常用属性和方法

常用属性:

  • shape
    numpy的array结构和pandas的dataframe结构一样都可以调用查看shape属性
data.shape

  • index
    Dataframe的行索引列表
data.index

  • columns
    Dataframe的列索引列表
data.columns

  • values
    直接获取其中array的值
data.values

  • T
    转置
    转置之后实际数据并没有转置
data.T


常用方法:

  • head(5):显示前5行内容
    如果不补充参数,默认5行。填入参数N则显示前N行
data.head(5)

  • tail(5):显示后5行内容
    如果不补充参数,默认5行。填入参数N则显示后N行
data.tail(5)

1.4.3 Datatframe索引的设置 修改行列索引值

注意:以下修改方式是错误的

错误写法1

# 错误修改方式
data.index[3] = '股票_3'
#报错: TypeError: Index does not support mutable operations


错误写法2:

# 错误
# 构造行索引序列
st_code = ['股票'+str(i) for i in range(st_change.shape[0])]
print(st_code)
# 添加行索引
data = pd.Dataframe(st_change, index=st_code)
data

正确的方式:
写法1:对dataframe结构的行索引index直接更改,有可能出问题,取决于赋什么值。以前这样做可以,现在不太推荐了

stock_code = ["股票_" + str(i) for i in range(stock_change.shape[0])]
# 必须整体全部修改
data.index = stock_code


写法2:用rename方法改
df.rename(index={原行索引名:替换行索引名})

data5 = np.random.normal(0,1,(10,5))
data5 = pd.Dataframe(data5)
data5.rename(index={0:1,2:22})

重设索引
  • reset_index(drop=False)
    • 设置新的下标索引
    • drop:默认为False,不删除原来索引,如果为True,删除原来的索引值
# 重置索引,drop=False
# 增加了列索引
data.reset_index()

# 重置索引,drop=True
# 删掉原来的行索引
data.reset_index(drop=True)

  • 以某列值设置为新的索引
    set_index(keys,drop=True)
    • keys : 列索引名成或者列索引名称的列表
    • drop : boolean, default True.当做新的索引,删除原来的列

设置新索引案例

# 以某列值设置为新的索引
df = pd.Dataframe({'month': [1, 4, 7, 10],
'year': [2012, 2014, 2013, 2014],
'sale':[55, 40, 84, 31]})
print(df)

# 以月份设置新的索引
df.set_index('month')

# 设置多个索引,以年和月份
df.set_index(['year','month'])


注:通过刚才的设置,这样Dataframe就变成了一个具有MultiIndex的Dataframe。

1.6 Series结构

  • series结构只有行索引
    我们获取’股票0’的所有数据(可能要转置)
data 

# series
data['股票0']
type(data['股票0'])

# 这一步相当于是series去获取行索引的值
data
data['股票0']['2017-01-02']

1.6.1 创建series

通过已有数据创建

  • 指定内容,默认索引
# 创建series
# 指定内容,默认索引
pd.Series(np.arange(10))

  • 指定索引
# 创建series
# 指定索引
pd.Series([6.7, 5.6, 3, 10, 2], index=[1, 2, 3, 4, 5])

  • 通过字典数据创建
# 创建series
# 通过字典数据创建
pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})

1.6.2 series获取索引和值
  • index
  • values
data3 = pd.Series({'red':100, 'blue':200, 'green': 500, 'yellow':1000})

print(data3.index)
print(data3.values)

1.7 小结
  • pandas的三种数据结构
    • Dataframe结构
    • Series结构
    • index索引对象


pandas库简介(1)–pandas的三种数据结构https://blog.csdn.net/zby1001/article/details/54234121

2 基本数据操作 2.1 索引操作

Numpy当中我们已经讲过使用索引选取序列和切片选择,pandas也支持类似的操作,也可以直接使用列名、行名称,甚至组合使用

2.1.1 直接使用行列索引(先列后行)
# 2 基本数据操作
# 2.1 索引操作
# 2.1.2 结合loc或者iloc使用索引

# 使用loc:只能指定行列索引的名字
data5.loc[1:3,4]
data5.loc[1:3,2:4]

2.1.2 结合loc或者iloc使用索引
# 2 基本数据操作
# 2.1 索引操作
# 2.1.2 结合loc或者iloc使用索引

# 使用loc:只能指定行列索引的名字
data5.loc[1:3,4] 
data5.loc[1:3,2:4]
data5.loc[[1,3],[2,4]]

# 2 基本数据操作
# 2.1 索引操作
# 2.1.2 结合loc或者iloc使用索引

# 使用iloc可以通过索引的下标去获取
data5.iloc[0:8,4:5]  # 得到一列
data5.iloc[0:8,3:6]  
data5.iloc[[1,3],[2,3]]  

2.1.3 使用ix组合索引(已官方弃用)

已经被弃用

2.2 赋值操作
# 2.2 赋值操作

# 直接修改原来的值
data5[1] = 4
data5

2.3 排序

排序有两种形式,一种对内容进行排序,一种对索引进行排序

Dataframe排序
  • 使用df.sort_values(key=, ascending=)对内容进行排序
    • 单个键或者多个键进行排序,默认升序
    • ascending=False:降序
    • ascending=True:升序
# 2.3 排序
# Dataframe排序

# 按照涨跌幅大小进行排序 , 使用ascending指定按照大小排序
data6 = data5.sort_values(by=3,ascending=False).head()
data6

# 2.3 排序
# Dataframe排序

# 按照多个键进行排序
data7 = data5.sort_values(by=[2,4])
data7

  • 使用sort_index对索引进行排序
# 2.3 排序
# Dataframe排序
# 使用sort_index对索引进行排序

# 对索引进行排序
data7.sort_index()

Series
  • 使用series.sort_values(ascending=True)对内容进行排序

series排序时,只有一列,不需要参数

data5[4]
type(data5[4]) # pandas.core.series.Series

data5[4].sort_values(ascending=True).head()

  • 使用series.sort_index()对索引进行排序
    与df一致
data5[4].sort_index()

2.4 总结
  • 索引操作,loc和iloc
  • 赋值操作
  • sort_values对内容进行排序
  • sort_index对索引进行排序
3 Dataframe运算 3.1 算术运算
  • add(other) # 加
    比如进行数学运算加上具体的一个数字
# 3 Dataframe运算
# 3.1 算术运算

data5[1].add(1)

  • sub(other) # 减
    求差
# 3 Dataframe运算
# 3.1 算术运算

data5
# 1、筛选两列数据
st = data5[0]
end = data5[1]

# 相减
data5[5] = end.sub(st)
data5

  • add()、sub()、mul()和div()分别表示加减乘除(注意乘法是对应元素相乘,而不是矩阵乘法)
# 3 Dataframe运算
# 3.1 算术运算

# 乘
first = data5[1]
second = data5[2]

data5['乘'] = first.mul(second)
data5

# 3 Dataframe运算
# 3.1 算术运算

# 除
first = data5[1]
second = data5[2]

data5['除'] = second.div(first)
data5

3.2 逻辑运算 3.2.1 逻辑运算符号<、 >、|、 & 筛选单个结果
# 3.2 逻辑运算
# 3.2.1 逻辑运算符号<、 >、|、 &

# 逻辑判断的结果可以作为筛选的依据
print(data5[2] > 0.5)

print(data5[data5[2]>0.5])

完成多个逻辑判断
  • 与判断 &
# 3.2 逻辑运算
# 3.2.1 逻辑运算符号<、 >、|、 &

data5[(data5[4]>0.1)&(data5[5]<4)]

  • 或判断
# 3.2 逻辑运算
# 3.2.1 逻辑运算符号<、 >、|、 &

data5[(data5[4]>0.1)|(data5[5]<4)]

3.2.2 逻辑运算函数
  • query(expr)
    • expr:查询字符串

通过query使得刚才的过程更加方便简单

# 3.2 逻辑运算
# 3.2.2 逻辑运算函数
data5.query("乘>0 | 除>0")

  • isin(values)
# 3.2 逻辑运算
# 3.2.2 逻辑运算函数

data5[data5[1].isin([4])]

3.3 统计运算 3.3.1 describe()

综合分析: 能够直接得出很多统计结果, count , mean , std , min , max 等

# 3.3 统计运算
# 3.3.1 describe()

# 计算平均值、标准差、最大值、最小值
data5.describe()

3.3.2 统计函数

Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差)结果

附上numpy的学习地址:
python使用numpy模块的介绍,基本操作,处理数据,包括生成数组,正态分布,均匀数组,数值改变,索引切片,形状修改,类型修改,数组去重,值运算,数组运算,合并分割,IO操作(读取)https://blog.csdn.net/weixin_55579895/article/details/120687601?spm=1001.2014.3001.5502



对于单个函数去进行统计的时候,坐标轴还是按照这些默认为“columns” (axis=0, default),如果要对行“index” 需要指定(axis=1)

  • max()、min()
# 3.3 统计运算
# 3.3.2 统计函数

# 使用统计函数:0 代表列求结果, 1 代表行求统计结果
data5.max()

  • std()、var()
# 3.3 统计运算
# 3.3.2 统计函数

# 方差
data5.var(1)

# 3.3 统计运算
# 3.3.2 统计函数

# 标准差
data5.std()

  • median():中位数
    中位数为将数据从小到大排列,在最中间的那个数为中位数。如果没有中间数,取中间两个数的平均值。
# 3.3 统计运算
# 3.3.2 统计函数

# 中位数
data5.median(0)

  • idxmax() # 求出最大值的位置、idxmin() # 求出最小值的位置
# 3.3 统计运算
# 3.3.2 统计函数

data5.idxmax(0)
data5.idxmax(axis=0)

# 3.3 统计运算
# 3.3.2 统计函数

data5.idxmin(0)
data5.idxmin(axis=0)

3.4 累计统计函数
函数作用
cumsum计算前1/2/3/…/n个数的和(值一个个累计上去)
cummax计算前1/2/3/…/n个数的最大值
cummin计算前1/2/3/…/n个数的最小值
cumprod计算前1/2/3/…/n个数的积

以上这些函数可以对series和dataframe操作
这里我们按照时间的从前往后来进行累计

# 3.4 累计统计函数

# 排序
data8 = data5.sort_index()

# 求和
st_0 = data8[0]
st_0.cumsum()
# data8


使用plot函数画出图像

import matplotlib.pyplot as plt
# plot显示图形
st_0.cumsum().plot()
# 需要调用show,才能显示出结果
plt.show()

3.5 自定义运算
  • apply(func, axis=0)
    • func:自定义函数
    • axis=0:默认是列,axis=1为行进行运算
案例:定义一个对列,最大值-最小值的函数
# 3.5 自定义运算

data5[[0,1]].apply(lambda x: x.max() - x.min(),axis=1)

4 Pandas画图 4.1 pandas.Dataframe.plot
  • Dataframe.plot (x=None, y=None, kind=‘line’)
    • x : label or position, default None
    • y : label, position or list of label, positions, default None
      • Allows plotting of one column versus another
    • kind : str
      • ‘line’ : line plot (default)
      • ‘bar’ : vertical bar plot
      • ‘barh’ : horizontal bar plot
      • ‘hist’ : histogram
      • ‘pie’ : pie plot
      • ‘scatter’ : scatter plot

更多参数细节:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFram
e.plot.html?highlight=plot#pandas.Dataframe.plot

4.2 pandas.Series.plot

更多参数细节:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.plo
t.html?highlight=plot#pandas.Series.plot

4.5 文件读取与存储

我们的数据大部分存在于文件当中,所以pandas会支持复杂的IO操作,pandas的API支持众多的文件格式,如CSV、SQL、XLS、JSON、HDF5。
注:最常用的HDF5和CSV文件

5.1 CSV 5.1.1 读取csv文件-read_csv
  • pandas.read_csv(filepath_or_buffer, sep =’,’ , delimiter = None)
    • filepath_or_buffer:文件路径
    • usecols:指定读取的列名,列表形式
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号