pandas (四)
pandas (四)
# 首先导入库
import pandas as pd
import numpy as np
import dai
复制代码
df = dai.query(f"""
select date, instrument, close, open, high, low, volume, amount from cn_stock_bar1d
""", filters={'date': ['2017-01-01', '2017-01-20']}).df()
df.head()
复制代码
date | instrument | close | open | high | low | volume | amount | |
---|---|---|---|---|---|---|---|---|
0 | 2017-01-03 | 959.585616 | 954.347703 | 961.680781 | 952.252538 | 45984049 | 420595176.0 | |
1 | 2017-01-03 | 2752.580618 | 2728.679773 | 2772.497988 | 2728.679773 | 21701669 | 449757486.0 | |
2 | 2017-01-03 | 180.638659 | 182.101649 | 182.223565 | 177.225015 | 715481 | 31737709.0 | |
3 | 2017-01-03 | 63.297708 | 62.648976 | 63.390384 | 62.648976 | 3704368 | 25240360.0 | |
4 | 2017-01-03 | 314.764800 | 309.231190 | 318.345372 | 308.254670 | 25167430 | 243074085.0 |
1、缺失数据处理
1. 1去掉包含缺失值的行:
df_drop = df.dropna()
df_drop.head()
复制代码
1.2 对缺失值进行填充:
df_fillna = df.fillna(value=0)
df_fillna.head()
复制代码
1.3 判断数据是否为nan,并进行布尔填充:
df_isnull = pd.isnull(df)
df_isnull.head()
复制代码
2、函数的应用和映射
df.mean()#列计算平均值
复制代码
df.mean(1)#行计算平均值
复制代码
df.mean(axis = 1,skipna = False) # skipna参数默认是 True 表示排除缺失值
复制代码
sorted_row_df = df.sort_index()#行名字排序
sorted_row_df.head()
复制代码
sorted_col_df = df.sort_index(axis=1) # 列名字排序
sorted_col_df.head()
复制代码
# 数据默认是按升序排序的,也可以降序排序
df.sort_index(axis=1,ascending = False)
复制代码
常用的方法如上所介绍们,还要其他许多,可自行学习,下面罗列了一些,可供参考:
count 非na值的数量
describe 针对Series或个DataFrame列计算汇总统计
min、max 计算最小值和最大值
argmin、argmax 计算能够获取到最大值和最小值得索引位置(整数)
idxmin、idxmax 计算能够获取到最大值和最小值得索引值
quantile 计算样本的分位数(0到1)
sum 值的总和
mean 值得平均数
median 值得算术中位数(50%分位数)
mad 根据平均值计算平均绝对离差
var 样本值的方差
std 样本值的标准差
skew 样本值得偏度(三阶矩)
kurt 样本值得峰度(四阶矩)
cumsum 样本值得累计和
cummin,cummax 样本值得累计最大值和累计最小值
cumprod 样本值得累计积
diff 计算一阶差分(对时间序列很有用)
pct_change 计算百分数变化
3、数据规整
Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作
concat 可以沿一条轴将多个对象堆叠到一起
append 将一行连接到一个DataFrame上
duplicated 移除重复数据
3.1 数据堆叠 concat
df1 = dai.query(f"""
SELECT date, instrument, open, high, low, close
FROM cn_stock_bar1d
WHERE instrument in ('600519.SH')
""", filters={'date': ['2017-01-01', '2017-01-05']}).df()
df1
复制代码
date | instrument | open | high | low | close | |
---|---|---|---|---|---|---|
0 | 2017-01-03 | 2341.622671 | 2360.676200 | 2331.325360 | 2343.584064 | |
1 | 2017-01-04 | 2344.004363 | 2466.941654 | 2343.864263 | 2465.120361 | |
2 | 2017-01-05 | 2451.740861 | 2461.898073 | 2419.798180 | 2428.904646 |
df2 = dai.query(f"""
SELECT date, instrument, open, high, low, close
FROM cn_stock_bar1d
WHERE instrument in ('600519.SH')
""", filters={'date': ['2017-01-05', '2017-01-10']}).df()
df2
复制代码
date | instrument | open | high | low | close | |
---|---|---|---|---|---|---|
0 | 2017-01-05 | 2451.740861 | 2461.898073 | 2419.798180 | 2428.904646 | |
1 | 2017-01-06 | 2428.204149 | 2520.249506 | 2424.421463 | 2457.064641 | |
2 | 2017-01-09 | 2436.329918 | 2471.915186 | 2427.503651 | 2441.303450 | |
3 | 2017-01-10 | 2440.883151 | 2465.750809 | 2427.923950 | 2444.735887 |
纵向拼接(默认):
pd.concat([df1, df2], axis=0)
复制代码
横向拼接,index对不上的会用 NaN 填充:
pd.concat([df1, df2], axis=1)
复制代码
3.2 数据连接 append
df1
复制代码
s = df1.iloc[0]
s
复制代码
df1.append(s, ignore_index=False) # ignore_index=False 表示索引不变
复制代码
df1.append(s, ignore_index=True) # ignore_index=True 表示索引重置
复制代码
3.3 移除重复数据duplicated
z = df1.append(s, ignore_index=False)
z
复制代码
查看重复数据:
z.duplicated()
复制代码
移除重复数据:
z.drop_duplicates()
复制代码
4、分组
z.groupby('open').sum()
复制代码
z.groupby(['open','close']).sum()