Pandas快速入门(四)
2019-10-09 本文已影响0人
乔治大叔
继Pandas快速入门(三),接着写:
初始数据
df = pd.DataFrame(np.random.randn(6, 4), index=pd.date_range('20190901', periods=6), columns=list('ABCD'))
# 查看数据
print(df)
分组(Grouping)
将查询结果按一个或多个进行分组,字段值相同的为一组
s = pd.Series(['foo','bar','foo','foo','bar','foo'],index=pd.date_range('20190901',periods=6))
df['E'] = s
print(df)
print(df.groupby('E').sum()) #分组后相加
print(df.groupby('E').mean()) #分组后每列平均数
print(df.groupby('E').std()) #分组后每列方差
print(df.groupby('E').max()) #分组后每列最大值
#原始数据
A B C D
2019-09-01 -2.339140 0.960050 -1.732604 0.726235
2019-09-02 -1.100443 -0.461649 -1.022285 1.617574
2019-09-03 -0.930862 -1.138174 0.063476 0.658085
2019-09-04 1.226518 -0.769316 -0.591096 -0.041768
2019-09-05 -1.083040 0.994000 0.959304 0.454745
2019-09-06 1.203059 0.120143 -0.054253 -2.299551
#给每条数据标注一个类型
A B C D E
2019-09-01 -2.339140 0.960050 -1.732604 0.726235 foo
2019-09-02 -1.100443 -0.461649 -1.022285 1.617574 bar
2019-09-03 -0.930862 -1.138174 0.063476 0.658085 foo
2019-09-04 1.226518 -0.769316 -0.591096 -0.041768 foo
2019-09-05 -1.083040 0.994000 0.959304 0.454745 bar
2019-09-06 1.203059 0.120143 -0.054253 -2.299551 foo
#由E分组后相加
A B C D
E
bar -2.183483 0.532351 -0.062981 2.072319
foo -0.840425 -0.827297 -2.314476 -0.956999
#由E分组后求每列平均数
A B C D
E
bar -1.091741 0.266176 -0.031491 1.03616
foo -0.210106 -0.206824 -0.578619 -0.23925
#由E分组后求每列方差
A B C D
E
bar 0.012306 1.029300 1.401196 0.822245
foo 1.742909 0.940268 0.820383 1.416711
#由E分组后求每列最大值
A B C D
E
bar -1.083040 0.99400 0.959304 1.617574
foo 1.226518 0.96005 0.063476 0.726235
堆叠
堆叠可以使DataFrame转变为了Series类型,也可以使Series转变为了DataFrame类型
stack = df.stack()
print(stack)
print(type(stack)) #从DataFrame转变为了Series类型
unstack = stack.unstack()
print(unstack)
print(type(unstack)) #从Series转变为了DataFrame类型
A B C D
2019-09-01 0.426467 0.332034 1.280684 -0.868442
2019-09-02 2.645575 2.133522 0.327961 -1.040339
2019-09-03 0.749445 0.124402 0.242715 -1.201410
2019-09-04 -0.308812 -0.850294 0.311778 -0.841252
2019-09-05 -0.954938 -0.482902 1.029856 0.602528
2019-09-06 -0.322377 1.155433 0.627880 0.365101
2019-09-01 A 0.426467
B 0.332034
C 1.280684
D -0.868442
2019-09-02 A 2.645575
B 2.133522
C 0.327961
D -1.040339
2019-09-03 A 0.749445
B 0.124402
C 0.242715
D -1.201410
2019-09-04 A -0.308812
B -0.850294
C 0.311778
D -0.841252
2019-09-05 A -0.954938
B -0.482902
C 1.029856
D 0.602528
2019-09-06 A -0.322377
B 1.155433
C 0.627880
D 0.365101
dtype: float64
<class 'pandas.core.series.Series'>
A B C D
2019-09-01 0.426467 0.332034 1.280684 -0.868442
2019-09-02 2.645575 2.133522 0.327961 -1.040339
2019-09-03 0.749445 0.124402 0.242715 -1.201410
2019-09-04 -0.308812 -0.850294 0.311778 -0.841252
2019-09-05 -0.954938 -0.482902 1.029856 0.602528
2019-09-06 -0.322377 1.155433 0.627880 0.365101
<class 'pandas.core.frame.DataFrame'>
绘图
有时数据太大,太复杂,是使开发人员或分析人员很头大的事,这里使用的是matplotlib库使其数据可视化,可以帮助开发和分析人员更好的 使用数据。
import matplotlib.pyplot as plt
ts = pd.DataFrame(np.random.randint(10,60,size=(100,2)),index=range(100),columns=(['A','B']))
print(ts)
plt.figure()
plt.scatter(ts['A'],ts['B'],alpha=0.5) #设置X、Y轴,alpha为透明度
plt.show()
A B
0 51 32
1 29 10
2 14 46
3 12 24
4 52 59
.. .. ..
95 14 53
96 28 10
97 19 57
98 58 43
99 33 46
[100 rows x 2 columns]
myplot.png
数据很多很复杂,但是看图片可以很清楚的看清他们的分布
数据输入/输出
df.to_csv('demo.csv') #csv写入
f = pd.read_csv('demo.csv') #csv读取