Pandas
-
介绍
-
panel + data + analysis
panel面板数据 = 计量经济学 三维数据
-
以Numpy为基础,值为Numpy模块在计算方面性能高的优势
基于matplotlib,能否简便的画图
独特的数据结构(DataFrame Panel Series)
-
-
优势
-
便捷的数据处理能力
-
读取文件方便
-
封装了Matplotlib,Numpy的画图和计算
-
-
DataFrame
-
结构:既有行索引,又有列索引的二维数组
import numpy as np import pandas as pd #创建一个符合正态分布的10个股票5天的跌涨幅数据 stock_change = np.random.normal(0, 1, (10, 5)) #添加行索引 stock = ["股票{}".format(i) for i in range(10)] #添加列索引 date = pd.date_range(start="20180101",periods=5,freq="B") datefrmae = pd.DataFrame(stock_change,index=stock,columns=date)
-
属性:
index
shape
columns
values
T
#直接使用 daframe.属性 ```
-
方法(显示前几行,后几行)
- head()
- tail()
-
索引设置
-
修改行列索引的设置
#不能修改单独的某一个索引,要想修改必须全部修改 stock_code = ["股票_" + str(i) for i in range(stock_change.shape[0])] stock.index = stock_code
-
重设索引
#会在每一列再加一列索引,从0开始,添加一列 #设置drop为Ture则会丢掉原来的索引,为False则不会,为新添加索引 data.reset_index(drop=True/False)
-
设置新索引
#设置新的索引,drop为True会丢掉原来的索引 df.set_index("month",drop=True) #设置多个索引,以年和月份 new_df = df.set_index(["year","month"]) #如何设置多个索引,那么这是索引已经变成了多重索引,MultiIndex
-
-
-
Series
-
介绍:带索引的一维数组,Series结构只有行索引
-
属性:index,value
pd.Series(np.arrange(3, 9, 2), index=["a", "b", "c"])
-
-
索引操作
-
直接索引
#先列后行 data[“列索引”][“行索引”]
-
按名字索引
data.loc[“行索引”]["列索引"] #或者 data.loc["行索引","列索引"]
-
按数字索引
data.iloc[1,0]
-
组合索引
data.loc[data.index[0:4],['open','close','high','low']] #或者 data.iloc[0:4, data.columns.get_indexer(['open','close','high','low'])]
-
赋值和排序
-
赋值
#直接使用索引进行赋值 data.open = 100 #修改open那一列的值为100 data.iloc[1, 0] = 222 #修改第二行,第一列的值为222
-
排序
- 对内容进行排序(按列排序)
#默认从小到大进行排列,如果加上ascending=False则会从大到小排序 data.sort_values(by="high", ascending=False)
- 按行排序
data.sort_index()
-
-
-
运算
-
算数运算
直接用运算符号或者用函数名
-
逻辑运算
<, >,|,&
-
逻辑运算函数
#query(expr),expr为查询的字符串 data.query("p_change > 2 & turnover > 15") #找出指定值的元组 data(data["turnover"].isin([4.19,2.39]))
-
统计运算
-
discribe()
获取总数,平均值,最小值,最大值,分位数
-
max()
#按列获取最大值,默认按列 data.max(axis = 1) #axis=1表示按行
-
idmax()
#返回最大值所在的索引 data.idmax(axis=0)
-
累积统计函数
data["p_change"].cumsum() #转化为折线图 data["p_change"].sort_index().plot()
-
自定义运算规则
#apply(func, axis = 0) # func 自定义函数 # axis = 0默认是列,axis= 1为行进行运算 data.[['open','close']].apply([lambda:x.max() - x.sin(), axis=0])
-
-
-
画图
- pandas.DataFrame.plot
- FataFrame.plot(x = 行标签, y = 列标签, kind = ‘line’)
- kind
- line 折线图
- bar 柱状图
- barth 水平柱状图
- hist 直方图
- pie 饼图
- scatter 散点图
- pandas.DataFrame.plot
-
读取文件
-
读取csv文件-read_csv()
pd.read_csv("stock.day.csv", usecols=['列标签','列标签','列标签']) #如果第一行不是字段,是数字,添加参数names pd.read_csv("stock.day.csv", names=["列标签","列标签","列标签","列标签"],usecols=['列标签','列标签','列标签']) #保存open列的数据,可选参数index=False,则不会保存行索引,mode追加模式,header,追加模式省略头标签 data[:10].to_csv("路径.csv",columns=["open"], index=False, mode="a",header=False)
-
读取hdf5文件
hdf5可以存储三维数据
#只有一个键的时候可以读取成功,如果有多个键读取时要指出是哪一个键 day_open = pd.read_hdf("路径.h5",key="") day_open.to_hdf(".h5",key="")
-
Json文件
#pd.read_json(path) #orient="records" #lines=True js = pd.read_json("路径.json",orient="records",lines=True) #转化为Json js.to_json("文件名.json",orient="recoeds",lines=True)
-