概述
概念
开源的数据挖掘库
用于数据探索
封装了matplotlib,numpy
案例知识点
pd.DataFrame(ndarray)–创建DataFrame
pd.date_range()–创建日期
参数: start–开始日期
end–结束日期
perios–时间跨度
freq --统计时间方式
stock_change=np.random.normal(0,1,(10,5))
stock_change
stock_code=["第{}股票".format(i+1) for i in range(stock_change.shape[0])]
stock_time=pd.date_range(start="20210103",periods=stock_change.shape[1])
stock_c=pd.DataFrame(stock_change,index=stock_code, columns=stock_time)
stock_c
DataFrame
对象.shape
对象.values
对象.index
对象.columns
对象.T --转置
对象.head --查看前几行
对象.tail --查看后几行
DataFrame设置索引
修改行列索引
必须整行或者整列去进行修改,直接通过属性更改
stock_i=["股票{}".format(i+1) for i in range(stock_change.shape[0])]
stock_c.index=stock_i
stock_c
重设索引
对象.reset_index()
stock_c.reset_index(drop=True)
基本数据操作
索引操作
-
直接 --先列后行
stock_data["open"]["2018-02-27"] # 注意pandas中必须是先行后列,这种方式不可以切片
-
loc --先行后列
# 使用先行后列必须使用loc stock_data.loc["2018-02-27":"2018-02-14","open"]
-
iloc–先行后列,索引值的下标
stock_data.iloc[:3,:-1]
-
下标和索引混合使用
stock_data.loc[stock_data.index[0:2],("high","low")] # 如果要数字和字符串混合用,使用loc。数字这里用属性进行切片
stock_data.iloc[:3,stock_data.columns.get_indexer(["close","volume"])]
赋值操作
-
[]方式或者.属性方式
stock_data["volume"]=100 #或者 stock_data.volume=100 stock_data["volume"]
排序
-
dataframe
对象.sort_values()
对象.sort_index()
参数:by 接受多个值
-
series
对象.sort_values()
对象.sort_index()
stock_data.sort_values(by=["open"],ascending=False).head() stock_data.sort_index(ascending=False).head() stock_data["open"].sort_values().head() stock_data["open"].sort_index().head()
-
算术运算
方法add,sub…
也可以直接用符号
import pandas as pd
data=pd.read_csv("./data/test.csv")
data.head()
data["close"].add(4).head()
逻辑运算
-
逻辑运算符号
data["open"]>23 data[data["open"]>23].head() ## 多个判断条件 data[(data["open"]>23)&(data["high"]>25)].head()
-
逻辑运算函数
-
dataframe.query("")
-
series.isin
data.query("open>23.53 & high>25").head() data["open"].isin([23.5]) data[data["open"].isin([23.5])].head()
统计函数
-
对象.describe()
-
统计函数
- sum
- mean
- mode–众数
- idxmin–最大值的索引
- idxmax–最小值的索引
-
累计统计函数
函数 作用 cumsum 计算前n个数的和 cummax 计算前n个数的max cummin 计算前n个数的min cumprod 计算前n个数的积
自定义函数
apply(func,axis=0)
定义一个对列,最大值-最小值的函数
data[["open", "high", "close"]].apply(lambda x: x.max()-x.min())
pandas画图
DataFrame.plot()
参数:kind
- line–折线图
- bar
- barh–条形图
- hist–直方图
- pie
- scatter
文件读取和存储
-
csv
-
读取–pd.read_csv
参数:
usecols
pd=pd.read_csv("./data/stock_day.csv",sep=",",usecols=["open","high"])#可以指定读取哪几行
-
存储–pd.to_csv
参数:
columns–保存哪列
pd.to_csv("./data/stock_day_open.csv",columns=["open"],index=True)
-
-
hdf(推荐使用)
读取–pd.read_hdf()
写入–pd.to_hdf()
参数:orient–按照什么方式进行读取或者写入
lines–是否按照行读取和写入
注意:保存文件是*.h5(后缀名)
好处:
- 压缩方式,读取效率快
- 压缩后,节省空间
- 支持跨平台
-
json
读取-pd.read_json()
写入–pd.to_json()
缺失值-处理
-
判断数据是否为NaN
np.any(np.isnull(movie))–如果有一个缺失值,就返回True
np.all(np.notnull(movie))–如果有一个缺失值返回False
-
处理方式
存在缺失值nan,并且是np.nan
-
删除存在缺失值的行–dropna(axis=‘rows’)
-
替换缺失值–fillna(value,inplace=True)
value:替换成的值
inplace:True会修改原来数据
其他符号比如?
利用replace函数替换
参数:to_place–替换前的值
value–替换后的值
-
数据离散化
-
什么是数据离散化
把一些连续数据分到某个区间,最后用不同的符号或者数字表达
-
数据离散化api
pd.qcut() --把数据大致分为数量相等的几类
pd.cut()–指定分组间隔
数量统计:
对象.value_counts
-
one-hot编码
就是把数据转换成0,1统计类型
别名:哑变量,热独编码
api: pd.get_dummies()
数据合并
pd.concat() --参数axis=
pd.concat([left,right],join='inner',axis=1,ignore_index=0)# 内连接默认是index,好像不能调节
pd.merge()
left --左表
right --右表
on --指定键
how – 按照什么方式进行拼接
pd.merge(left,right,how="inner",on=["key1","key2"])
数据透视表
-
什么是交叉表,透视表
就是探索两列数据之间的关系
-
pd.crosstab()
返回具体数量
-
对象.privot_table(数据透视表)
data.pivot_table(index='weekday',values='p_c1',aggfunc=np.mean) # index表示索引,values表示要查看的值,aggcunc表示聚合函数的操作
分组和聚合
-
对象.groupby()
参数:as_index 是否进行索引
注意:分组后一定要聚合,下面有常用的两种方式
col.groupby(["color"])['price1'].mean() #对颜色分组对prices1进行聚合
col.groupby(["color"]).count()