pands统计
本系列教程采用的数据为上证01号股票数据,感谢Tushare金融社区的数据分享
isnull和notnull:用于检测是否为空值,可用于df和series
dropna:删除缺失值
fillna:填充缺失值
import pandas as pd
df=pd.read_excel('000001.SZ.xlsx',encoding='gbk')
df.set_index('trade_date',inplace=True)
df.head()
|
ts_code |
open |
high |
low |
close |
change |
pct_chg |
vol |
amount |
pre_close |
trade_date |
|
|
|
|
|
|
|
|
|
|
20160104 |
000001.SZ |
12.00 |
12.03 |
11.23 |
11.33 |
-0.66 |
-5.50 |
563497.87 |
660376.1531 |
11.99 |
20160105 |
000001.SZ |
11.27 |
11.57 |
11.15 |
11.40 |
0.07 |
0.62 |
663269.95 |
755531.3537 |
11.33 |
20160106 |
000001.SZ |
11.42 |
11.56 |
11.39 |
11.53 |
0.13 |
1.14 |
515706.44 |
591698.5204 |
11.40 |
20160107 |
000001.SZ |
11.41 |
11.41 |
10.91 |
10.94 |
-0.59 |
-5.12 |
174761.10 |
194869.4935 |
11.53 |
20160108 |
000001.SZ |
11.21 |
11.29 |
10.90 |
11.12 |
0.18 |
1.65 |
747527.58 |
831334.5462 |
10.94 |
汇总类统计
df.describe()
|
open |
high |
low |
close |
change |
pct_chg |
vol |
amount |
pre_close |
count |
1218.000000 |
1218.000000 |
1218.000000 |
1218.000000 |
1218.000000 |
1218.000000 |
1.218000e+03 |
1.218000e+03 |
1218.000000 |
mean |
11.998374 |
12.157094 |
11.856691 |
12.011872 |
0.008112 |
0.077623 |
9.472223e+05 |
1.190617e+06 |
12.003760 |
std |
2.670632 |
2.738598 |
2.605982 |
2.673990 |
0.241713 |
1.867864 |
5.871951e+05 |
8.540574e+05 |
2.667239 |
min |
8.560000 |
8.600000 |
8.450000 |
8.570000 |
-1.550000 |
-9.974300 |
1.707778e+05 |
1.755915e+05 |
8.570000 |
25% |
9.570000 |
9.700000 |
9.480000 |
9.570000 |
-0.100000 |
-0.818550 |
5.377827e+05 |
5.597184e+05 |
9.562500 |
50% |
11.205000 |
11.355000 |
11.035000 |
11.210000 |
0.000000 |
0.000000 |
7.969810e+05 |
9.731886e+05 |
11.210000 |
75% |
13.870000 |
14.100000 |
13.660000 |
13.930000 |
0.100000 |
0.880000 |
1.183685e+06 |
1.553497e+06 |
13.927500 |
max |
20.000000 |
20.880000 |
19.590000 |
20.050000 |
1.430000 |
10.035100 |
4.711461e+06 |
7.168653e+06 |
20.050000 |
df['high'].mean()
12.157093596059095
唯一去重和按值计数
一般不用于数值列,而是枚举,分类列
df['ts_code'].unique()
array(['000001.SZ'], dtype=object)
df['ts_code'].value_counts()
000001.SZ 1218
Name: ts_code, dtype: int64
相关系数和协方差
df=df.drop('ts_code',axis=1)
df.head()
|
open |
high |
low |
close |
change |
pct_chg |
vol |
amount |
pre_close |
trade_date |
|
|
|
|
|
|
|
|
|
20160104 |
12.00 |
12.03 |
11.23 |
11.33 |
-0.66 |
-5.50 |
563497.87 |
660376.1531 |
11.99 |
20160105 |
11.27 |
11.57 |
11.15 |
11.40 |
0.07 |
0.62 |
663269.95 |
755531.3537 |
11.33 |
20160106 |
11.42 |
11.56 |
11.39 |
11.53 |
0.13 |
1.14 |
515706.44 |
591698.5204 |
11.40 |
20160107 |
11.41 |
11.41 |
10.91 |
10.94 |
-0.59 |
-5.12 |
174761.10 |
194869.4935 |
11.53 |
20160108 |
11.21 |
11.29 |
10.90 |
11.12 |
0.18 |
1.65 |
747527.58 |
831334.5462 |
10.94 |
df.corr()
|
open |
high |
low |
close |
change |
pct_chg |
vol |
amount |
pre_close |
open |
1.000000 |
0.998088 |
0.998606 |
0.996711 |
0.000257 |
-0.007285 |
0.325969 |
0.552511 |
0.999211 |
high |
0.998088 |
1.000000 |
0.998166 |
0.998739 |
0.043391 |
0.035916 |
0.357892 |
0.581254 |
0.997335 |
low |
0.998606 |
0.998166 |
1.000000 |
0.998539 |
0.035425 |
0.026793 |
0.317093 |
0.545438 |
0.997856 |
close |
0.996711 |
0.998739 |
0.998539 |
1.000000 |
0.073093 |
0.064621 |
0.342535 |
0.567594 |
0.995907 |
change |
0.000257 |
0.043391 |
0.035425 |
0.073093 |
1.000000 |
0.982789 |
0.196158 |
0.193215 |
-0.017345 |
pct_chg |
-0.007285 |
0.035916 |
0.026793 |
0.064621 |
0.982789 |
1.000000 |
0.212919 |
0.199264 |
-0.024279 |
vol |
0.325969 |
0.357892 |
0.317093 |
0.342535 |
0.196158 |
0.212919 |
1.000000 |
0.955498 |
0.325626 |
amount |
0.552511 |
0.581254 |
0.545438 |
0.567594 |
0.193215 |
0.199264 |
0.955498 |
1.000000 |
0.551521 |
pre_close |
0.999211 |
0.997335 |
0.997856 |
0.995907 |
-0.017345 |
-0.024279 |
0.325626 |
0.551521 |
1.000000 |
df['high'].corr(df['low'])
0.9981656586604757
pandas缺失值处理
df=pd.read_excel('fraction.xlsx',encoding='utf-8',skiprows=2)
df
|
Unnamed: 0 |
姓名 |
科目 |
分数 |
0 |
NaN |
小明 |
语文 |
85.0 |
1 |
NaN |
NaN |
数学 |
90.0 |
2 |
NaN |
NaN |
英语 |
80.0 |
3 |
NaN |
NaN |
NaN |
NaN |
4 |
NaN |
小王 |
语文 |
85.0 |
5 |
NaN |
NaN |
数学 |
NaN |
6 |
NaN |
NaN |
英语 |
90.0 |
7 |
NaN |
NaN |
NaN |
NaN |
8 |
NaN |
小刚 |
语文 |
80.0 |
9 |
NaN |
NaN |
数学 |
85.0 |
10 |
NaN |
NaN |
英语 |
90.0 |
检测空值
df.isnull()
|
Unnamed: 0 |
姓名 |
科目 |
分数 |
0 |
True |
False |
False |
False |
1 |
True |
True |
False |
False |
2 |
True |
True |
False |
False |
3 |
True |
True |
True |
True |
4 |
True |
False |
False |
False |
5 |
True |
True |
False |
True |
6 |
True |
True |
False |
False |
7 |
True |
True |
True |
True |
8 |
True |
False |
False |
False |
9 |
True |
True |
False |
False |
10 |
True |
True |
False |
False |
df['分数'].isnull()
0 False
1 False
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 False
10 False
Name: 分数, dtype: bool
df.loc[df['分数'].notnull(),:]
|
Unnamed: 0 |
姓名 |
科目 |
分数 |
0 |
NaN |
小明 |
语文 |
85.0 |
1 |
NaN |
NaN |
数学 |
90.0 |
2 |
NaN |
NaN |
英语 |
80.0 |
4 |
NaN |
小王 |
语文 |
85.0 |
6 |
NaN |
NaN |
英语 |
90.0 |
8 |
NaN |
小刚 |
语文 |
80.0 |
9 |
NaN |
NaN |
数学 |
85.0 |
10 |
NaN |
NaN |
英语 |
90.0 |
删掉全是空值的列
df.dropna(axis=1,how='all',inplace=True)
df.dropna(axis=0,how='all',inplace=True)
df
|
姓名 |
科目 |
分数 |
0 |
小明 |
语文 |
85.0 |
1 |
NaN |
数学 |
90.0 |
2 |
NaN |
英语 |
80.0 |
4 |
小王 |
语文 |
85.0 |
5 |
NaN |
数学 |
NaN |
6 |
NaN |
英语 |
90.0 |
8 |
小刚 |
语文 |
80.0 |
9 |
NaN |
数学 |
85.0 |
10 |
NaN |
英语 |
90.0 |
将单个空值填充
df.fillna({'分数':0})
|
姓名 |
科目 |
分数 |
0 |
小明 |
语文 |
85.0 |
1 |
NaN |
数学 |
90.0 |
2 |
NaN |
英语 |
80.0 |
4 |
小王 |
语文 |
85.0 |
5 |
NaN |
数学 |
0.0 |
6 |
NaN |
英语 |
90.0 |
8 |
小刚 |
语文 |
80.0 |
9 |
NaN |
数学 |
85.0 |
10 |
NaN |
英语 |
90.0 |
df['分数']=df['分数'].fillna(0)
df
|
姓名 |
科目 |
分数 |
0 |
小明 |
语文 |
85.0 |
1 |
NaN |
数学 |
90.0 |
2 |
NaN |
英语 |
80.0 |
4 |
小王 |
语文 |
85.0 |
5 |
NaN |
数学 |
0.0 |
6 |
NaN |
英语 |
90.0 |
8 |
小刚 |
语文 |
80.0 |
9 |
NaN |
数学 |
85.0 |
10 |
NaN |
英语 |
90.0 |
df['姓名']=df['姓名'].fillna(method='ffill')
df
|
姓名 |
科目 |
分数 |
0 |
小明 |
语文 |
85.0 |
1 |
小明 |
数学 |
90.0 |
2 |
小明 |
英语 |
80.0 |
4 |
小王 |
语文 |
85.0 |
5 |
小王 |
数学 |
0.0 |
6 |
小王 |
英语 |
90.0 |
8 |
小刚 |
语文 |
80.0 |
9 |
小刚 |
数学 |
85.0 |
10 |
小刚 |
英语 |
90.0 |
df.to_excel('fraction_updated.xlsx',index=False)