机器学习

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读取
上一篇下一篇

猜你喜欢

热点阅读