pandas (四)

15
0
0
2023-12-23

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

000001.SZ

959.585616

954.347703

961.680781

952.252538

45984049

420595176.0

1

2017-01-03

000002.SZ

2752.580618

2728.679773

2772.497988

2728.679773

21701669

449757486.0

2

2017-01-03

000004.SZ

180.638659

182.101649

182.223565

177.225015

715481

31737709.0

3

2017-01-03

000005.SZ

63.297708

62.648976

63.390384

62.648976

3704368

25240360.0

4

2017-01-03

000006.SZ

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

600519.SH

2341.622671

2360.676200

2331.325360

2343.584064

1

2017-01-04

600519.SH

2344.004363

2466.941654

2343.864263

2465.120361

2

2017-01-05

600519.SH

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

600519.SH

2451.740861

2461.898073

2419.798180

2428.904646

1

2017-01-06

600519.SH

2428.204149

2520.249506

2424.421463

2457.064641

2

2017-01-09

600519.SH

2436.329918

2471.915186

2427.503651

2441.303450

3

2017-01-10

600519.SH

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()