详解pandas.map()(映射数值)函数使用方法

  • Post category:Python

pandas.map()是Pandas中的一个函数,其作用是根据一个Python字典或一个自定义函数来对Pandas对象的列进行映射操作。其适用于对一列数据进行转换的场景,比如将某一列的性别字符串变成1和0两种表示方式。

pandas.map()的使用方法

pandas.map() 可以对 Series 、DataFrame 中的某列数据进行映射操作。

下面是 pandas.map() 的常用参数:

  • arg:字典、序列或函数,用于映射。字典和序列用于将值转换为其它值;函数用于自定义转换逻辑。
  • na_action:{None, ‘ignore’},可选。在映射中缺失的值如何处理, 默认为 None,表示保留缺失值;
  • na_action:’ignore’, 表示忽略缺失值;

下面依次为您演示两个 pandas.map() 的实例:

实例1:将一列数据映射为新的值

首先,我们构造一个示例数据集:

import pandas as pd
import numpy as np
df = pd.DataFrame({'pet': ['cat', 'dog', 'dog', 'fish', 'cat', 'dog'],
                    'age': [3, 7, 2, np.nan, 9, 2]})

现在我们想要将 pet 列的字符值转换为整数,具体来说,猫(cat)对应 0,狗(dog)对应 1,鱼(fish)对应 2。因此,我们需要创建一个如下的字典进行映射:

pet_map = {'cat': 0, 'dog': 1, 'fish': 2}

然后,我们可以通过下面的代码使用 pandas.map() 将列 pet 映射成新的值:

df['pet_id'] = df['pet'].map(pet_map)
print(df)

输出结果如下:

    pet  age  pet_id
0   cat  3.0       0
1   dog  7.0       1
2   dog  2.0       1
3  fish  NaN       2
4   cat  9.0       0
5   dog  2.0       1

实例2:使用自定义函数映射一列数据

在这个例子中,我们希望根据 age 列中的数值来映射一个新的列 age_group,将 age 列分为儿童(child)、青年(youth)、中年(middle-aged)和老年(elderly)四种年龄段。我们需要先自定义一个函数来处理这个任务:

def map_age(age):
    if age < 18:
        return 'child'
    elif age < 35:
        return 'youth'
    elif age < 65:
        return 'middle-aged'
    else:
        return 'elderly'

随后我们使用 apply 方法调用以上函数,并将其结果附加在 df DataFrame 上:

df['age_group'] = df['age'].apply(map_age)
print(df)

输出结果如下:

    pet  age    age_group
0   cat  3.0        child
1   dog  7.0        child
2   dog  2.0        child
3  fish  NaN         None
4   cat  9.0        child
5   dog  2.0        child

至此,您已经学习了 pandas.map() 的作用与使用方法!