机器学习

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)

统计

在一些操作中经常会排除缺失值。

进行描述性统计:

print(df.describe()) #显示统计数据
print(df.std()) #显示方差,
print(df.mean())  #得到每列的平均数
print(df.mean(1))  #得到每行的平均数
print(df.max())  #得到每列的最大值
print(df.max(1))  #得到每行的最大值
print(df.min())  #得到每列的最小值
print(df.min(1))  #得到每行的最小值
print(df.cumsum()) #得到每列的最累加
                   A         B         C         D
2019-09-01 -0.301720 -0.327584  1.658597  2.672121
2019-09-02  1.231629 -0.785624  0.936318 -0.213149
2019-09-03 -1.582332 -1.778585 -0.784753 -0.076871
2019-09-04 -2.138803 -1.919293  0.878578  1.523728
2019-09-05  0.015031  0.413647  0.184342 -0.021764
2019-09-06 -2.208370  0.333319  0.339141  1.086922

#显示统计数据
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean  -0.830761 -0.677353  0.535371  0.828498
std    1.372759  1.010042  0.830017  1.146886
min   -2.208370 -1.919293 -0.784753 -0.213149
25%   -1.999685 -1.530345  0.223042 -0.063094
50%   -0.942026 -0.556604  0.608860  0.532579
75%   -0.064157  0.168093  0.921883  1.414526
max    1.231629  0.413647  1.658597  2.672121

#显示方差
A    1.372759
B    1.010042
C    0.830017
D    1.146886
dtype: float64

#得到每列的平均数
A   -0.830761
B   -0.677353
C    0.535371
D    0.828498
dtype: float64

#得到每行的平均数
2019-09-01    0.925354
2019-09-02    0.292293
2019-09-03   -1.055635
2019-09-04   -0.413947
2019-09-05    0.147814
2019-09-06   -0.112247
Freq: D, dtype: float64

#得到每列的最大值
A    1.231629
B    0.413647
C    1.658597
D    2.672121
dtype: float64

#得到每行的最大值
2019-09-01    2.672121
2019-09-02    1.231629
2019-09-03   -0.076871
2019-09-04    1.523728
2019-09-05    0.413647
2019-09-06    1.086922
Freq: D, dtype: float64

 #得到每列的最小值
A   -2.208370
B   -1.919293
C   -0.784753
D   -0.213149
dtype: float64

 #得到每行的最小值
2019-09-01   -0.327584
2019-09-02   -0.785624
2019-09-03   -1.778585
2019-09-04   -2.138803
2019-09-05   -0.021764
2019-09-06   -2.208370
Freq: D, dtype: float64

#得到每列的最累加
                   A         B         C         D
2019-09-01 -0.301720 -0.327584  1.658597  2.672121
2019-09-02  0.929909 -1.113208  2.594915  2.458972
2019-09-03 -0.652423 -2.891793  1.810162  2.382101
2019-09-04 -2.791226 -4.811085  2.688740  3.905829
2019-09-05 -2.776195 -4.397439  2.873082  3.884065
2019-09-06 -4.984565 -4.064120  3.212224  4.970986

应用(Apply)

将函数应用于数据:

print(df.apply(lambda x:x.max()-x.min())) #可以使用函数运算DF中的值
#每列的最大值减去最小值
A    2.128442
B    1.369998
C    3.041190
D    2.466461
dtype: float64

Series在str属性中配备了一组字符串处理方法,可以轻松地对数组的每个元素进行操作,如下面的代码片段所示。

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
print(s.str.lower()). #字符串全部小写 
print(s.str.capitalize())  #字符串首字母大写
0       a
1       b
2       c
3    aaba
4    baca
5     NaN
6    caba
7     dog
8     cat
dtype: object

0       A
1       B
2       C
3    Aaba
4    Baca
5     NaN
6    Caba
7     Dog
8     Cat
dtype: object

连接(Concat)

Pandas提供了各种工具,可以轻松地将Series,DataFrame和Panel对象与各种赋值逻辑组合在一起,用于索引和连接/合并类型操作时的关系代数功能。

df = pd.DataFrame(np.random.randn(6, 4), index=pd.date_range('20190901', periods=6), columns=list('ABCD'))
# 查看数据
print(df)
df2 = pd.DataFrame(np.random.randn(6,4),index=pd.date_range('20190901', periods=6),columns=list('EFGH'))
print(df2)
print(pd.concat([df,df2],axis=1)) #左右合并
datas2 = pd.date_range('20190907',periods=6)
df2 = pd.DataFrame(np.random.randn(6,4),index=datas2,columns=list('ABCD'))
print(pd.concat([df,df2]))  #上下合并
                   A         B         C         D
2019-09-01  0.000264  0.580407  1.186368  1.114972
2019-09-02 -0.346254  2.456113 -0.052740 -1.230668
2019-09-03  0.108114 -1.290747  0.624875  0.075484
2019-09-04  1.212673 -0.058395 -0.890161  0.731236
2019-09-05 -1.572110  0.216077 -0.649611  0.497655
2019-09-06  0.235560  1.734389 -0.022035 -0.467324
                   E         F         G         H
2019-09-01 -1.716722 -1.759474  0.518296 -0.692994
2019-09-02 -1.830417 -1.150664 -1.451513 -0.165872
2019-09-03 -1.554910  1.133170  0.467904  0.491470
2019-09-04  0.141910 -0.281543  0.192367 -1.440507
2019-09-05  1.101696  0.335960 -0.196785  0.551793
2019-09-06  1.561382  1.027514 -1.367671  0.713349
                   A         B         C  ...         F         G         H
2019-09-01  0.000264  0.580407  1.186368  ... -1.759474  0.518296 -0.692994
2019-09-02 -0.346254  2.456113 -0.052740  ... -1.150664 -1.451513 -0.165872
2019-09-03  0.108114 -1.290747  0.624875  ...  1.133170  0.467904  0.491470
2019-09-04  1.212673 -0.058395 -0.890161  ... -0.281543  0.192367 -1.440507
2019-09-05 -1.572110  0.216077 -0.649611  ...  0.335960 -0.196785  0.551793
2019-09-06  0.235560  1.734389 -0.022035  ...  1.027514 -1.367671  0.713349

[6 rows x 8 columns]
                   A         B         C         D
2019-09-01  0.000264  0.580407  1.186368  1.114972
2019-09-02 -0.346254  2.456113 -0.052740 -1.230668
2019-09-03  0.108114 -1.290747  0.624875  0.075484
2019-09-04  1.212673 -0.058395 -0.890161  0.731236
2019-09-05 -1.572110  0.216077 -0.649611  0.497655
2019-09-06  0.235560  1.734389 -0.022035 -0.467324
2019-09-07 -0.115130  1.266141 -0.116892  0.540026
2019-09-08  1.946468  0.291551 -1.185379  1.430597
2019-09-09 -0.527619  1.274734 -0.736222 -1.081834
2019-09-10 -0.184131  1.332090 -0.684283  1.340151
2019-09-11  0.403992  0.481825 -1.345079 -0.878319
2019-09-12  1.414334  0.785315  0.423981  0.273149

SQL风格的合并(类似于join)

left = pd.DataFrame({'key':['foo' for i in range(3)],'lval':[j*2-1 for j in range(1,4)]})
print(left)
right = pd.DataFrame({'key':['foo' for i in range(3)],'lval':[j*2 for j in range(1,4)]})
print(right)
print(pd.merge(left,right,on='key'))
   key  lval
0  foo     1
1  foo     3
2  foo     5

   key  lval
0  foo     2
1  foo     4
2  foo     6

   key  lval_x  lval_y
0  foo       1       2
1  foo       1       4
2  foo       1       6
3  foo       3       2
4  foo       3       4
5  foo       3       6
6  foo       5       2
7  foo       5       4
8  foo       5       6
上一篇 下一篇

猜你喜欢

热点阅读