【Dataframe】基本操作
DataFrame 有些方法可以直接进行数据统计,矩阵计算之类的基本操作。
1 转置
直接字母 T,线性代数上线。
比如说把之前的 df3 转置一下。
>>> df3
name age gender
0 小明 17 男
1 小红 20 女
2 狗蛋 5 女
3 铁柱 40 男
>>> df3.T
0 1 2 3
name 小明 小红 狗蛋 铁柱
age 17 20 5 40
gender 男 女 女 男
>>>
2 描述性统计
使用 describe 可以对数据根据列进行描述性统计。
比如说对 df1 进行描述性统计。
>>> df1
A B C D
A 1.534538 -0.457642 -0.177800 -0.721894
B -0.641673 -0.033828 -0.008813 -0.260790
C -0.058381 -0.492103 0.579269 0.476031
D -0.442216 -1.541925 -0.198197 0.946656
>>> df1.describe()
A B C D
count 4.000000 4.000000 4.000000 4.000000
mean 0.098067 -0.631374 0.048615 0.110001
std 0.987766 0.641806 0.363809 0.744649
min -0.641673 -1.541925 -0.198197 -0.721894
25% -0.492080 -0.754558 -0.182899 -0.376066
50% -0.250299 -0.474872 -0.093307 0.107621
75% 0.339849 -0.351688 0.138207 0.593688
max 1.534538 -0.033828 0.579269 0.946656
>>>
如果有的列是非数值型的,那么就不会进行统计。
如果想对行进行描述性统计,可以转置后进行 describe
3 计算
使用 sum 默认对每列求和,sum(1) 为对每行求和。比如
>>> df3.sum()
name 小明小红狗蛋铁柱
age 82
gender 男女女男
dtype: object
>>>
可以发现就算元素是字符串,使用 sum 也会加起来。
>>> df3.sum(1)
0 17
1 20
2 5
3 40
dtype: int64
>>>
而一行中,有字符串有数值则只计算数值。
数乘运算使用 apply,比如。
>>> df2
A B C D
A 1 2 3 4
B 2 3 4 5
C 3 4 5 6
D 4 5 6 7
>>> df2.apply(lambda x: x * 2)
A B C D
A 2 4 6 8
B 4 6 8 10
C 6 8 10 12
D 8 10 12 14
>>>
如果元素是字符串,则会把字符串再重复一遍。
乘方运算跟 matlab 类似,直接使用两个 *,比如。
>>> df2 ** 2
A B C D
A 1 4 9 16
B 4 9 16 25
C 9 16 25 36
D 16 25 36 49
>>>
乘方运算如果有元素是字符串的话,就会报错。
4 新增
扩充列可以直接像字典一样,列名对应一个 list,但是注意 list 的长度要跟 index 的长度一致。
>>> df2['E'] = ['999', '999', '999', '999']
>>> df2
A B C D E
A 1 2 3 4 999
B 2 3 4 5 999
C 3 4 5 6 999
D 4 5 6 7 999
>>>
还可以使用 insert,使用这个方法可以指定把列插入到第几列,其他的列顺延。
>>> df2.insert(0, 'F', [888,888,888,888])
>>> df2
F A B C D E
A 888 1 2 3 4 999
B 888 2 3 4 5 999
C 888 3 4 5 6 999
D 888 4 5 6 7 999
>>>
5 合并
使用 join可以将两个 DataFrame 合并,但只根据行列名合并,并且以作用的那个 DataFrame 的为基准。如下所示,新的 df7 是以 df2 的行号 index 为基准的。
>>> df6 = pd.DataFrame(['my', 'name', 'is', 'a'], index=list('ACDH'), columns=list('G'))
>>> df6
G
A my
C name
D is
H a
>>> df7 = df2.join(df6)
>>> df7
F A B C D E G
A 888 1 2 3 4 999 my
B 888 2 3 4 5 999 NaN
C 888 3 4 5 6 999 name
D 888 4 5 6 7 999 is
>>>
join 这个方法还有how这个参数可以设置,合并两个 DataFrame 的交集或并集。参数为’inner‘表示交集,’outer’表示并集。
>>> df8 = df2.join(df6, how='inner')
>>> df8
F A B C D E G
A 888 1 2 3 4 999 my
C 888 3 4 5 6 999 name
D 888 4 5 6 7 999 is
>>> df9 = df2.join(df6, how='outer')
>>> df9
F A B C D E G
A 888.0 1.0 2.0 3.0 4.0 999 my
B 888.0 2.0 3.0 4.0 5.0 999 NaN
C 888.0 3.0 4.0 5.0 6.0 999 name
D 888.0 4.0 5.0 6.0 7.0 999 is
H NaN NaN NaN NaN NaN NaN a
>>>
如果要合并多个 Dataframe,可以用 list 把几个 Dataframe 装起来,然后使用 concat转化为一个新的 Dataframe。
>>> df10 = pd.DataFrame([1,2,3,4], index=list('ABCD'), columns=['a'])
>>> df11 = pd.DataFrame([10,20,30,40], index=list('ABCD'), columns=['b'])
>>> df12 = pd.DataFrame([100,200,300,400], index=list('ABCD'), columns=['c'])
>>> list1 = [df10.T, df11.T, df12.T]
>>> df13 = pd.concat(list1)
>>> df13
A B C D
a 1 2 3 4
b 10 20 30 40
c 100 200 300 400
>>>
学下基础知识
MARK
learn