pandas map()用法

map()函数可以用于Series对象或DataFrame对象的一列,接收函数作为或字典对象作为参数,返回经过函数或字典映射处理后的值。

例:

frame = pd.DataFrame({'item':['ball', 'mug', 'pen', 'pencil', 'ashtray'],
                      'price':[1, 2, 3, 4, 5]})
print(frame)
frame.price = frame.price.map(lambda x: x + 1)
print(frame)


### Pandas 中 `map` 函数的具体用法 #### 1. **基本概念** Pandas 的 `map` 函数用于将 Series 或 DataFrame 列中的每个元素替换为其对应的映射值。它通常接受一个字典或函数作为输入参数,返回一个新的 Series,而不会修改原始数据结构[^2]。 --- #### 2. **使用字典进行映射** 当传入一个字典时,`map` 将尝试匹配 Series 中的值与字典的键。如果某个值未找到对应键,则会将其设置为 `NaN`(除非指定了其他默认行为)。例如: ```python import pandas as pd s = pd.Series(['cat', 'dog', None, 'rabbit']) mapping_dict = {'cat': 'kitten', 'dog': 'puppy'} result = s.map(mapping_dict) print(result) ``` 输出结果: ``` 0 kitten 1 puppy 2 NaN 3 NaN dtype: object ``` 这里 `'cat'` 和 `'dog'` 被成功映射到 `'kitten'` 和 `'puppy'`,而缺失值 (`None`) 和未定义的 `'rabbit'` 都被设为了 `NaN`[^2]。 --- #### 3. **使用自定义函数进行映射** 可以传递一个函数给 `map` 方法,该函数会对 Series 中的每一个元素单独调用。例如: ```python def custom_map(x): if isinstance(x, str): return x.upper() return x df = pd.DataFrame({ 'A': ['a', 'b', 'c', 'd'], 'B': ['e', 'f', 'g', 'h'] }) df_mapped = df.applymap(custom_map) # applymap 是对整个 DataFrame 应用 map 功能的方式之一 print(df_mapped) ``` 输出结果: ``` A B 0 a e 1 b f 2 c g 3 d h ``` 注意,在此例子中我们实际上也可以直接对单列应用 `map` 来达到同样的效果[^1]。 --- #### 4. **处理 NaN 值** 可以通过指定参数 `na_action='ignore'` 来忽略掉那些原本会被转化为 `NaN` 的情况。比如下面的例子展示了如何跳过非字符串类型的项而不产生额外的 `NaN`: ```python s = pd.Series([1, 2, float('nan'), 4]) # 不带 na_action 参数的情况 print(s.map(lambda x: x * 2)) # 带有 na_action='ignore' print(s.map(lambda x: x * 2, na_action='ignore')) ``` 前者会产生一些不必要的警告或者错误提示;后者则更加健壮可靠[^5]。 --- #### 5. **实际应用场景举例** 假设有一个员工表,其中包含他们的 ID、姓名以及所属的一级和二级部门编号。现在希望通过预定义好的名称对照关系来显示更直观的信息: ```python data = { 'ID': [1000, 1001, 1002, 1003], 'Name': ['Jerry', 'Sal', 'Buck', 'Perry'], 'SecondaryDeptCode': ['BR1', 'BR2', 'BR3', 'BR4'], 'PrimaryDeptCode': ['BR1', 'BR1', 'BR2', 'BR1'] } dept_mapping = { 'BR1': 'Department One', 'BR2': 'Department Two', 'BR3': 'Department Three', 'BR4': 'Department Four' } df = pd.DataFrame(data) df['PrimaryDeptName'] = df['PrimaryDeptCode'].map(dept_mapping) df['SecondaryDeptName'] = df['SecondaryDeptCode'].map(dept_mapping) print(df[['ID', 'Name', 'PrimaryDeptName', 'SecondaryDeptName']]) ``` 最终得到的结果将是每名雇员连同他们所在的主要次级单位全称列表[^3]。 --- ### 总结 - 如果需要简单地替换某些固定值,推荐使用字典型参。 - 若要执行复杂变换操作,则应考虑提供适当逻辑封装后的回调函数形式。 - 特殊情况下记得合理运用 `na_action` 控制异常状况下的表现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值