pandasDataFrame使用简介


写再最前面

最近再实现我的RFTrader量化工具的时候,使用pandas.DataFrame的类来封装我的标的数据,在使用的过程中有许多不清晰的地方,我在这里做一个整理,希望在我之后的编程过程中,如果有不熟悉的地方,可以考虑翻过头来看看,到底是什么问题,并且总结一下,看看还存在哪些问题,方便之后在编程过程中,少犯错误。

Intro to DataFrames

这里的内容源自于https://www.youtube.com/watch?v=e60ItwlZTKM,这个视频中,详细讲解了12个实用的pandas.DataFrame案例,我看完之后觉得之前很多的问题都明确了,并且有所收获,这里记录一下。

pandas与NumPy的关系

pandas是基于NumPy实现的,所有pandas库会引用NumPy的包。

pandas与NumPy的区别

pandas的官方链接

https://pandas.pydata.org/

pandas cheatsheet链接

https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf

从csv文件中读取数据并打包为DataFrame对象

file_name = "Data.txt"
df.pd.read_csv(file_name)

获取前几个数据、后几个数据

df.head()   # 获取前5个数据
df.tail(3)  # 获取后3个数据

获取DataFrame的数据类型信息、索引信息、列名信息、值信息

print(df.dtypes)
print(df.index)
print(df.columns)
print(df.values)    # 一般不会这样获取DataFrame的值

获取数据的统计信息

df.describe()   # 会返回均值、标准差、最小值、最大值等统计信息,很有用

排序

df.sort_values('record_high',ascending=False)   # 对列名为record_high的数据进行降序排序

对数据进行裁剪

df.avg_low                          # 返回列名为avg_low的数据
df['avg_low']                       # 返回列名为avg_low的数据,同上
df[2:4]                             # 返回第3行和第4行数据
df[['avg_low','avg_high']]          # 返回列名为'avg_low','avg_high'的两列数据
df.loc[:,['avg_low','avg_high']]    # 返回列名为'avg_low','avg_high'的两列数据,同上
df.loc[9,['avg_precipitation']]     # 返回列名为'avg_precipitation'以及第10行的数据
df.iloc[3:5,[0,3]]                  # 返回第4行和第5行数据,返回第0行~第2行数据 loc. by index

对数据进行过滤筛选(filtering)

df[df.avg_low > 1.0]                        # 返回df中avg_low中比1大的数据
df[df['month'].isin(['Jun','Jul','Aug'])]   # 返回列month中数据为'Jun','Jul','Aug'的数据

对DataFrame中的数据进行赋值操作(Assignment)

df.loc[9,['avg_precipitation']] = 101.3       # 将列名为'avg_precipitation',第10行的单元格赋值为101.3
df.loc[9,['avg_precipitation']] = np.nan      # 将列名为'avg_precipitation',第10行的单元格赋值为nan(Not A Number)
df.loc[:,'avg_low'] = np.array([5]*len(df))   # 将列名为'avg_low'下的所有数据赋值为5
df['avg_day'] = (df.avg_low+df.avg_high)/2    # 新增列,列名为'avg_day',其值为avg_high列与avg_low的均值

对列进行重命名

df.rename(columns = {'avg_precipitation':'avg_rain'}, inplace=True) # 将原名为'avg_precipitation'新命名为'avg_rain',并且在原df中生效更改
df = df.rename(columns = {'avg_precipitation':'avg_rain'})  # 功能同上,inplace=True相当于df = df.rename()

将数据写入csv文件

df.to_csv('Data.csv')

文章作者: 南航古惑仔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 南航古惑仔 !
  目录