使用Lambda表达式转换DataFrame指定列值的Pandas技术问题
解决Pandas中Category列的缩写转换问题
嘿,别为这个小问题纠结啦!针对你需要把Category列里的Car转成C、Bike转成B(同时保留其他类别)的需求,我给你整理了几种实用的Pandas解决方案,挑你顺手的用就行~
首先先把你的原始DataFrame构造出来,方便复现:
import pandas as pd data = { 'ID': [8900, 9904, 6381, 5862, 2270], 'Hourly Rate': [2.99, 9.99, 19.99, 2.99, 2.99], 'Category': ['Car', 'Car', 'Bike', 'Bike', 'Car'] } df1 = pd.DataFrame(data)
方法一:字典映射 + map()(灵活易扩展)
这种方法最适合后续可能添加更多类别映射的场景,逻辑清晰好维护:
# 定义转换规则的字典 category_mapping = {'Car': 'C', 'Bike': 'B'} # 复制原DataFrame避免修改原始数据 df2 = df1.copy() # 用map转换,并用fillna保留未定义的原始类别 df2['Category'] = df2['Category'].map(category_mapping).fillna(df2['Category'])
解释:map()会根据字典替换对应值,fillna()确保如果遇到字典里没有的类别(比如新增的Truck),会保留原始值而不会变成NaN。
方法二:直接用replace()(最简洁)
如果你的需求只是替换指定值,replace()一步就能搞定,代码最精简:
df2 = df1.copy() # 直接传入替换规则字典 df2['Category'] = df2['Category'].replace({'Car': 'C', 'Bike': 'B'})
解释:replace()默认会保留未指定的原始值,不需要额外处理,非常省心。
方法三:嵌套np.where()(适合简单条件)
如果只有少数几个转换条件,用numpy的where()也能实现:
import numpy as np df2 = df1.copy() # 嵌套判断:先判断是否为Car,再判断是否为Bike,否则保留原值 df2['Category'] = np.where(df2['Category'] == 'Car', 'C', np.where(df2['Category'] == 'Bike', 'B', df2['Category']))
解释:这种方法适合条件较少的场景,条件多了会显得代码冗余,不如字典映射清晰。
最终转换后的df2效果:
ID Hourly Rate Category 0 8900 2.99 C 1 9904 9.99 C 2 6381 19.99 B 3 5862 2.99 B 4 2270 2.99 C
内容的提问来源于stack exchange,提问作者Failed Scientist
相关产品推荐
相关产品推荐

