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