Skip to content

map()

map(arg,na_action=None)
第一个参数arg,可以是一个字典,也可以是一个函数,甚至是pd.Series,当它是一个函数时,传入的参数就是Series的值;第二个参数na_action的默认值为None,它接收两个值:None或者ignore,默认值为None。当它为ignore时,遇到空值不再传入映射函数中,而是直接返回NaN。

参数是函数时:

import pandas as pd

#map()用于Series或DataFrame对象的一列
df = pd.DataFrame({'Math':[50,60,70,80],'English':[99,34,83,23],'CS':[32,60,75,90]})
print(df)

a = df.Math.map(lambda x:x+5)
print(a)
 Math  English  CS
0    50       99  32
1    60       34  60
2    70       83  75
3    80       23  90

0    55
1    65
2    75
3    85
Name: Math, dtype: int64

参数是字典:

d = {60:'及格',90:'优秀'}
df1 = df['CS'].map(d)
print(df1)
0    NaN
1     及格
2    NaN
3     优秀
Name: CS, dtype: object

applymap()

applymap()是针对DataFrame来说,是将一个函数作用到dataframe的每个元素上

#applymap()是针对DataFrame来说,是将一个函数作用到dataframe的每个元素上
df2 = df.applymap(lambda x:str(x)+'A')
print(df2)
  Math English   CS
0  50A     99A  32A
1  60A     34A  60A
2  70A     83A  75A
3  80A     23A  90A

apply()

apply()函数也是针对DataFrame来说,但是这次是将一个函数作用在DataFrame中的一整列或一整行上。
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs) 参数说明

import numpy as np
# 参数axis=1是将函数作用在一整行,axis=0(为默认值)作用在一整列。
df3 = df.copy()   #修改后不改变最初的df
#增加一列,得到三科总值
df3['total'] = df3[['Math','English','CS']].apply(lambda x:x.sum(),axis=1)
print(df3)
#增加一行,计算每一列的平均值
df4 = df3.copy()
df4.loc['平均'] = df4.apply(lambda x:x.mean(),axis=0)
print(df4)
#numpy的运算方法和函数
print(df.apply(np.sqrt))
print(df.apply(np.sum,axis=1))   #因为是np.sum,axis=1是对所有列进行求和
   Math  English  CS  total
0    50       99  32    181
1    60       34  60    154
2    70       83  75    228
3    80       23  90    193

    Math  English     CS  total
0   50.0    99.00  32.00  181.0
1   60.0    34.00  60.00  154.0
2   70.0    83.00  75.00  228.0
3   80.0    23.00  90.00  193.0
平均  65.0    59.75  64.25  189.0

       Math   English        CS
0  7.071068  9.949874  5.656854
1  7.745967  5.830952  7.745967
2  8.366600  9.110434  8.660254
3  8.944272  4.795832  9.486833

0    181
1    154
2    228
3    193
dtype: int64

两者区分

1、map传递的函数不能有多个参数,但apply可以
2、apply只能传递函数,但map除了可以接收函数外还可以接收Series和字典

idxmax()

返回轴上最大值第一次出现的索引。

max_index = df.idxmax(axis=0)  #按列返回各科最大值对应的行索引,默认axis=0
print(max_index)

max_column = df.idxmax(axis=1)  #返回行最大值对应的列索引,即每个人分数最高的科目
print(max_column)
Math       3
English    0
CS         3
dtype: int64

0    English
1       Math
2    English
3         CS
dtype: object

map()函数