用pandas进行数据分析,对行或者列操作用的比较多的函数是apply,map和applymap:
'''这三个方法的作用范围:
如果是作用于每一个元素的话 推荐使用applymap
如果是作用于单列(也是一个Series)的话推荐使用 apply 或 map,
如果是作用于列于列之间的运算的话 推荐使用 apply
这三个方法的作用对象:
applymap的作用对象是 DataFrame,不能作用于Series
map的作用对象只能是Series
apply既可以作用于DataFrame,又可以作用于Series,作用于DataFrame的时候是作用列或者行(取决于axis是1还是0)
作用于Series是作用于series的元素
'''
函数:applymap
df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
'key2' : ['one', 'two', 'one', 'two', 'one'],
'data1' : np.arange(5),
'data2' : np.arange(5,10)})
key1 key2 data1 data2
0 a one 0 5
1 a two 1 6
2 b one 2 7
3 b two 3 8
4 a one 4 9
df.applymap(lambda x:"A" + str(x))
key1 key2 data1 data2
0 Aa Aone A0 A5
1 Aa Atwo A1 A6
2 Ab Aone A2 A7
3 Ab Atwo A3 A8
4 Aa Aone A4 A9
函数:map
df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
'key2' : ['one', 'two', 'one', 'two', 'one'],
'data1' : np.arange(5),
'data2' : np.arange(5,10)})
key1 key2 data1 data2
0 a one 0 5
1 a two 1 6
2 b one 2 7
3 b two 3 8
4 a one 4 9
df['key1'].map(lambda x:str(x)+'hello,world') #取DataFrame的某一列(Series)
0 ahello,world
1 ahello,world
2 bhello,world
3 bhello,world
4 ahello,world
Name: key1, dtype: object
函数:apply apply既可以作用DataFrame,又可以作用于Series,且作用于DataFrame时随参数axis的不同作用方向不一样,与上述两个函数区别较大。
作用于 DataFrame 且 axis= 0
df = pd.DataFrame({'key1' : np.arange(2,7),
'key2' : np.arange(8,13),
'data1' : np.arange(5),
'data2' : np.arange(5,10)})
key1 key2 data1 data2
0 2 8 0 5
1 3 9 1 6
2 4 10 2 7
3 5 11 3 8
4 6 12 4 9
df.apply(lambda x:sum(x),axis = 0) #求出每一列的合
key1 20
key2 50
data1 10
data2 35
dtype: int64
从上面看出, 当axis = 0时,apply是作用每一列
作用于 DataFrame 且 axis= 1
df['第三和第四列之和'] = df.apply(lambda x:x['data1']+x['data2'],axis = 1)
df
key1 key2 data1 data2 第三和第四列之和
0 2 8 0 5 5
1 3 9 1 6 7
2 4 10 2 7 9
3 5 11 3 8 11
4 6 12 4 9 13
apply作用于DataFrame且axis=1的时候是作用于行的
apply作用于Series时和map一样,这里就不放例子了,总之作用于DataFrame全部元素时用applymap,作用于DataFrame之间行于行,列于列之间关系时用apply,作用于Series时用map和apply均可。