用字典匹配和非匹配字符串替换数据帧值

2024-09-30 14:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据帧:

df = pd.DataFrame{'col1': ['afs', 'chk', 'est', 'app'],
 'col2': ['ofcr', 'guar', 'ltv', 'gender'],
 'col3': ['code', 'mod']}

我有一本字典:

dict = {'ofcr':'officer','chk':'check','mod':'modification','est':'estimated','app':'application', 'gender':'gender'}

我需要迭代df并用它们各自的值替换匹配键。我可以通过以下方法逐列执行此操作:

df["col1"] = df["col1"].map(dict)

但这会将不匹配项转换为NaN。我想要的是保持标记不变,但添加“-UNKNOWN-”或字符串中类似明显的内容,以便稍后处理。我尝试过循环:

for tok in df['col1']:
    if tok in dict.values():
        df.replace(dict, inplace=True)
    if tok not in dict.values():
        df.replace(tok, tok '-UNKNOWN', inplace=True)
    print(tok)

这也替换了匹配项(奇怪的是,在所有列中,不仅仅是传入的一列),但并不影响非匹配项


Tags: inmodappdfifgenderdictreplace
2条回答

您可以使用^{}

df = pd.DataFrame({'col1': ['afs', 'chk', 'est', 'app'],
 'col2': ['ofcr', 'guar', 'ltv', 'gender'],
 'col3': ['code', 'mod', 'xxx', 'zzz']})

dct = {'ofcr':'officer','chk':'check','mod':'modification','est':'estimated','app':'application', 'gender':'gender'}

print(df.applymap(lambda x: dct.get(x, x + '-UNKNOWN')))

印刷品:

          col1          col2          col3
0  afs-UNKNOWN       officer  code-UNKNOWN
1        check  guar-UNKNOWN  modification
2    estimated   ltv-UNKNOWN   xxx-UNKNOWN
3  application        gender   zzz-UNKNOWN

映射完成后,执行以下额外步骤:

df["col1"] = df["col1"].map(dict)
df["col1"] = df["col1"].fillna('-UNKNOWN')

相关问题 更多 >