最近在对股票数据进行清洗和计算的过程中,遇到了不少对这个库函数的使用,所以做了个函数使用总结。
pandas 很多函数会指定轴,要正确理解轴的含义,才容易明白函数意义
ax0 选中列,对行进行函数应用 ax1 选中行,对列进函数应用
我的理解是先看选中了啥,然后应用操作,例如默认的都是 ax0 ,代表选中了列,多行进行运算操作。
信息
函数 | 说明 |
---|---|
df.shape | 输出dataframe有多少行,多少列 |
df.shape[0] | 输出行数量,1 输出列数量 |
df.colums | 输出列的名字 |
df.index | 输出行的名字 |
df.dtpyes | 输出列的类型名 |
df.head(n) | 输出df前n行 |
df.tail(n) | 输出df后n行 |
df.sample(n=3) | 随机抽取几行 |
df.describe() | 对数字进行一个简单直观统计 |
行操作
函数 | 说明 |
---|---|
loc['index名'] | 索引某行,返回Series |
loc['index名n':'index名m'] | 索引多行,返回DataFrame |
loc[:,'date':'code'] | 索引所有行,列为date,code ,返回DataFrame |
at[index,'code'] | 访问某个元素,loc也可以,但更为高效 |
iloc[n] | 以序号选取某一行,返回Series |
iloc[n:m] | 序号多行选择,返回DataFrame |
iloc[:,n:m] | 第一个:选择所有,逗号后面的是多列选择, 返回DataFrame |
iloc[:,:] | 读取所有行和列,返回DataFrame |
iat[1,1] | 读取指定的某个元素, 使用iloc也可以,但这个更高效 |
列操作
函数 | 说明 |
---|---|
df['股票名']+'_地产' | 原有字符上添加新字符 |
df['收盘价']*df['成交量'] | 多列操作运算,eg:结果是成交额 |
df['新列名']=df['股票名']+'_地产' | 新增一列 |
统计函数
函数 | 说明 |
---|---|
df['收盘价'].mean() | 一列求均值,返回一个数 |
df[['收盘价','最高价']].mean() |
多列求均值,返回多个数 |
df[['收盘价','最高价']].mean(axis=1) |
选择行,操作多列,返回所有行对应的均值 默认axis=0,选中列,操作多行 |
df['收盘价'].max() | 原理同上,返回最大值 |
df['收盘价'].min() | 原理同上,返回最小值 |
df['收盘价'].std() | 原理同上,返回标准差 |
df['收盘价'].count() | 原理同上,返回非空数值数量 |
df['收盘价'].median() | 原理同上,返回中位数 |
df['收盘价'].quantile(0.5) | 原理同上,返回50%分位数 |
很有用的函数
函数 | 说明 |
---|---|
shif() | 偏移函数,大于0 下偏移 |
diff() | 偏移差值函数 |
pct_change() | 偏移差值比例函数,相当于涨跌幅 |
rank(ascending=True, pct=False) |
排序函数,ascending代表顺序排序 还是逆序排序,pct是否百分比排序(0-1.0) |
value_counts() | 统计该列中每个元素出现的个数, 返回数据Series |
df['收盘价_3天均值']=df['收盘价'].rolling(3).mean() | rolling函数,取最近的n行, 其实就是一个滑动窗口 |
df['收盘价_至今均值']=df['收盘价'].expanding().mean() | expanding函数,从开始到当前行 |
筛选
函数 | 说明 |
---|---|
df[df['code'] = '000001'] | 返回符合筛选条件的行, 多个条件用 & 等逻辑符链接 |
缺省值
函数 | 说明 |
---|---|
dropna(how='any') | 删除带有空值的行, how='any'意味着,只要有一个空值就删除 how='all'要全是空值才删除 |
dropna(subset=['code','name'],how='any') | 选中对应的列符合空值删除行 |
fillna(value='我叫补全') | 缺失值补全为固定值 |
df['某列'].fillna(value=df['收盘价'],inplace=True) | 某列空值以某列数值补全 |
fillna(method='ffill') | 向上寻找非空值补全 |
fillna(method='bfill') | 向下寻找非空值补全 |
fillna(method='bfill') | 向下寻找非空值补全 |
notnull() | 非空值判断 |
isnull() | 空值判断 |
df[df['某列'].notnull()] | 以某列不为空作为条件,行输出 |
排序函数
函数 | 说明 |
---|---|
reset_index(inplace=True) | 索引恢复为默认 |
sort_values(by=['date'],ascending=1) | by参数指定按照什么进行排序, ascending指定顺序还是逆序 |
sort_values(by=['code','date'],ascending=[1,1]) | 多列进行排序,eg code 相等的放前面, 再按date进行排序 |
合并函数
函数 | 说明 |
---|---|
df1.append(df2,ignore_index=True) | 拼接函数,ignore_index 是否忽略index名, True重新给index, eg 上下拼接 |
去重
函数 | 说明 |
---|---|
drop_duplicates(subset=['股票代码','交易日期'], keep= 'first') inplace=True |
subset 参数指定用那几列作为去重的依据, 若不指定则以全部列的数据做为判断, keep 参数是指去重时保持上面一行 还是下面一行 |
其他重要的函数
函数 | 说明 |
---|---|
df.rename(colums={'MACD_金叉':'金叉'}) | 可以字典形式对列名进行重命名 |
df.empty | 是否为空 |
df.T | 数据转置,行列互换 |
字符串处理
函数 | 说明 |
---|---|
df['股票代码'].str[:2] | 对股票代码列的字符串去前两字符 |
df['股票代码'].str.upper() | 对股票代码列的字符串转为大写 |
df['股票代码'].str.lower() | 对股票代码列的字符串转为小写 |
df['股票代码'].str.len() | 对股票代码列的字符串进行计算 |
df['股票代码'].str.strip() | 对股票代码列的字符串进行空格去掉 |
df['股票代码'].str.contains('sz') | 该列是否包含该字符 |
df['股票代码'].str.replace('sz','sh') | 该列字符进行替换 |
df['股票代码'].str.split('; ') | 对字符串进行分割 |
df['股票代码'].str.split('; ').str[:2] | 对字符串进行分割后,取第一位置 |
时间处理
函数 | 说明 |
---|---|
df['交易日期']=pd.to_datetime(df['交易日期']) | 将交易日期由字符串转成日期 |
df['交易日期'] | 通过交易日期进行访问 |
df['交易日期'].dt.year | 输出日期的年份 |
df['交易日期'].dt.month | 输出日期的月份,其他雷同week |
df['交易日期']+pd.Timedelta(days=1) | 用于表示时间差数据 |
上面都是一些很常用的函数,官方文档才是最全的,数据清洗统计过程中常常去这里查吧。
官方使用手册
https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html#operations
总结于 2022 年 11 月 20 日 16:27:55
本文由 mdnice 多平台发布