如何将DataFrame列的每个值转换为对应的标识整数?
解决Pandas DataFrame列值替换的问题
嘿,这事儿很简单,有几种高效的方法能帮你完成Value列的批量替换,我给你详细说说:
方法1:使用replace()方法(最直观)
replace()是Pandas里专门做值替换的方法,直接传入一个映射字典就可以批量替换所有匹配项,完全符合你的需求:
import pandas as pd df = pd.DataFrame(dict(NoMatter=list(range(6)), Value=['a','b',7,7,'b','b'])) # 定义替换规则字典 replace_mapping = {'a': 1, 'b': 2, 7: 3} # 对Value列执行替换 df['Value'] = df['Value'].replace(replace_mapping) print(df)
运行后你会得到期望的结果:
NoMatter Value
0 0 1
1 1 2
2 2 3
3 3 3
4 4 2
5 5 2
这个方法的好处是:即使列里有不在映射字典中的值,也不会被修改,只会替换指定的内容,非常安全。
方法2:使用map()方法(适合严格映射)
如果确定Value列的所有值都在你的映射规则里,也可以用map()方法,它会直接把每个值映射成字典对应的value:
import pandas as pd df = pd.DataFrame(dict(NoMatter=list(range(6)), Value=['a','b',7,7,'b','b'])) # 同样用映射字典 map_mapping = {'a': 1, 'b': 2, 7: 3} df['Value'] = df['Value'].map(map_mapping) print(df)
⚠️ 注意:如果Value列存在不在映射字典里的值,map()会把这些值转换成NaN。如果担心这种情况,可以搭配fillna()保留原始值:
df['Value'] = df['Value'].map(map_mapping).fillna(df['Value'])
两种方法都能完美实现你的需求,选哪个全看你的实际场景~
内容的提问来源于stack exchange,提问作者Ewdlam
相关产品推荐
相关产品推荐

