pandas map(),apply(),applymap()区别解析

  • Post category:Python

当我们处理数据时,Pandas是一个很好的库,它拥有多种处理数据的函数,包括map、apply和applymap。这些函数都有一些相同之处,但它们在应用和处理数据集合时有所不同。

pandas.map()

map是一个Series方法,用于对Series对象的每个元素应用一个方法,并返回其结果。它可以接受以下几种参数:

  • function:要应用于元素的函数
  • dict:一个字典结构,它将要被映射到Series中的元素上
  • callable对象
  • 具体的值

下面是一个简单的示例:

import pandas as pd

data = pd.Series([10,20,30,40,50])
new_data = data.map(lambda x: x*2)

print(new_data)

程序会输出:

0     20
1     40
2     60
3     80
4    100
dtype: int64

这里我们首先定义了一个Series对象,它有5个元素。然后使用map函数,在返回的新Series中将每个元素乘以2。虽然这个例子很简单,但是可以看出Pandas的map函数是一个很强大的功能。

pandas.apply()

apply是另一个Series方法,它对Series的每个元素应用一个函数,并返回一个新的Series对象。与map函数不同的是,它可以接受任何函数作为参数,并且可以返回任何类型的数据。对于DataFrame对象,apply方法还可以按列或行应用函数。

下面是一个使用apply函数的示例:

import pandas as pd

frame = pd.DataFrame({
    'name': ['A', 'B', 'C'],
    'age': [20, 25, 30],
    'country': ['US', 'CA', 'UK']
})

def intro(row):
    return "My name is {} and I am {} years old. I come from {}".format(row['name'], row['age'], row['country'])

result = frame.apply(intro, axis=1)

print(result)

输出结果:

0      My name is A and I am 20 years old. I come fr...
1      My name is B and I am 25 years old. I come fr...
2      My name is C and I am 30 years old. I come fr...

此示例说明,apply函数可以对数据框中的每一行应用一个函数,并将结果作为一个新的Series对象返回。上述代码中的函数将行数据转换为一句介绍,包含姓名、年龄和国家信息。

pandas.applymap()

applymap是一个DataFrame方法,它对DataFrame的每个元素应用一个函数,并返回一个新的DataFrame对象。和apply方法不同的是,applymap方法是在DataFrame元素级别上操作的。

下面是一个使用applymap方法的示例:

import pandas as pd

frame = pd.DataFrame({
    'name': ['A', 'B', 'C'],
    'age': [20, 25, 30],
    'country': ['US', 'CA', 'UK']
})

def upper_case(cell):
    return cell.upper()

result = frame.applymap(upper_case)

print(result)

此示例说明,applymap函数对数据框中的每个元素进行大写转换,并返回一个新的DataFrame对象,每个元素都是大写字母。

综上所述,pandas.map()、pandas.apply()和pandas.applymap()在使用方式和对象类型上略有不同,但都是对Series或DataFrame对象的元素进行操作和转换的强大工具。