Python Pandas:基于匹配规则创建DataFrame新列
解决Pandas根据字典映射生成新列的问题
嘿,我来帮你搞定这个需求!你想要基于已有列column_ref的取值,通过字典d的映射生成新列column_new对吧?这在Pandas里其实有非常直接的解决方案,大概率是你之前的方法没踩对正确的路子~
最常用的方法:map()函数
map()是处理这种列值映射最直观的工具,它会逐个匹配column_ref里的元素和字典d的键,把对应的字典值赋值给新列。
示例代码
import pandas as pd # 先构造一个示例DataFrame(你可以替换成自己的df) df = pd.DataFrame({ 'column_ref': ['column_ref_value1', 'column_ref_value2', 'column_ref_value3', 'column_ref_value1', 'some_other_value'] }) # 你的映射字典 d = {'column_ref_value1': 'a', 'column_ref_value2': 'b', 'column_ref_value3': 'c'} # 生成新列 df['column_new'] = df['column_ref'].map(d)
执行后你的DataFrame会变成这样:
| column_ref | column_new |
|---|---|
| column_ref_value1 | a |
| column_ref_value2 | b |
| column_ref_value3 | c |
| column_ref_value1 | a |
| some_other_value | NaN |
如果不想让未匹配到的值变成NaN,可以用fillna()指定默认值:
df['column_new'] = df['column_ref'].map(d).fillna('未匹配')
备选方案:replace()函数
如果你希望未匹配到的元素保留原列的值,而不是变成NaN,可以用replace():
df['column_new'] = df['column_ref'].replace(d)
这时候上面示例中的some_other_value会直接保留在column_new列里,不会被替换。
排查之前失败的可能原因
如果之前尝试没成功,大概率是这两个问题:
- 类型不匹配:比如
column_ref里的值是数字类型,而字典d的键是字符串,或者反过来,这时候需要统一类型,比如df['column_ref'] = df['column_ref'].astype(str) - 格式不一致:比如列里的值有大小写差异、多余空格,比如
'Column_Ref_Value1'和字典里的'column_ref_value1'不匹配,这时候可以先标准化格式:df['column_ref'] = df['column_ref'].str.lower().str.strip()
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

