pands最快入门(三)-统计与缺失值处理

pands统计

本系列教程采用的数据为上证01号股票数据,感谢Tushare金融社区的数据分享

isnull和notnull:用于检测是否为空值,可用于df和series
dropna:删除缺失值
fillna:填充缺失值

import pandas as pd
df=pd.read_excel('000001.SZ.xlsx',encoding='gbk')
#inpalce控制生成新的df或者替换原来的df
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
#查看单个Series的数据
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
删掉全是空值的列
#how可以为all或any
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
#ffill=forward fill
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)

你可能感兴趣的:(pandas最快入门,python,pandas,数据分析)