pandas 中apply、map 和 applymap 三者之间的异同

用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均可。

 

 

 

 

你可能感兴趣的:(数据分析)