如何检查Pandas列值是否为字典键并将无效值替换为NA
解决方案
核心思路是用Pandas内置的isin()方法判断值是否在合法缩写集合中,不符合的直接替换为空值即可,无需做全称映射。
实现代码
假设你已定义好州缩写字典为state_dict,待处理的DataFrame为df:
import pandas as pd # 1. 提取所有合法州缩写 valid_state_abbr = state_dict.keys() # 2. 替换无效值为NA,合法值保留原值 # 方法1:where方法,写法简洁 df["LOSS STATE"] = df["LOSS STATE"].where(df["LOSS STATE"].isin(valid_state_abbr), pd.NA) # 方法2:loc索引实现,逻辑更直观 # df.loc[~df["LOSS STATE"].isin(valid_state_abbr), "LOSS STATE"] = pd.NA
可选优化
如果你的数据可能存在大小写不统一、首尾带空格的问题,可以先清洗数据再做判断,避免合法值被误判:
# 先去除首尾空格+统一转大写,再做判断 df["LOSS STATE"] = df["LOSS STATE"].str.strip().str.upper().where( df["LOSS STATE"].str.strip().str.upper().isin(valid_state_abbr), pd.NA )
效果验证
按照你给出的示例数据运行后,索引为5的Nonsense会被替换为NA,其余合法缩写全部保留原有值,完全符合需求。
内容的提问来源于stack exchange,提问作者Nhyi
相关产品推荐
相关产品推荐

