首页 > 解决方案 > 如何使用第二个数据框中的正确拼写匹配和替换数据框中拼写错误的字符串值?

问题描述

我需要用正确的拼写替换数据框中的大量拼写错误的值。这将是一个持续的过程,因为数据集将继续更新,因此需要尽可能高效地完成。

首先想到了两个明显的解决方案:

1) 数据框.replace()

2)使用不正确的值作为键将数据框与另一个数据框合并

由于多种原因,这些选项似乎不是我的问题的实际解决方案。

对于解决方案 1 (dataframe.replace()),我只是有太多需要替换的值,以便在每次摄取新数据时继续添加一行又一行的 df.replace 命令。

对于解决方案 2(合并数据框),我有十多个列需要更改,因此我必须创建许多单独的数据框,其中一些与我用作键的列名称相同合并。

下面是我(理想情况下)使用的两个数据框的简单示例。

df1:

ResponseID      InputA       InputB
-------------------------------------
|ABC123     |   Chikcen   |  First  |
|DEF456     |   Cwo       |  Second |
|GHI789     |   Dog       |  Third  | 
-------------------------------------

df2:

Old_Value      New_Value
---------------------------
|Chikcen    |   CHICKEN   |
|Cwo        |   COW       |
|Dog        |   DOG       |
|First      |    1        |
|Second     |    2        |
|Third      |    3        |
---------------------------

我想针对 df2 中的 Old_Value 列运行 df1 中的那些列(InputA 和 InputB),并将这些值替换为 New_Value 列中的相应值。

理想情况下,它将产生以下数据框

df_final:

ResponseID      InputA       InputB
-------------------------------------
|ABC123     |   CHICKEN   |  1      |
|DEF456     |   COW       |  2      |
|GHI789     |   DOG       |  3      | 
-------------------------------------

如果这确实是可能的,我无法想象解决方案会非常复杂。我的问题是我不知道这种类型的过程甚至会被命名为在某处寻找预先存在的答案。谢谢

标签: pythonpandasnumpy

解决方案


使用pandas.Series.map

final_df=df1.copy()
final_df['InputA']=final_df['InputA'].map(df2.set_index('Old_Value')['New_Value'])
final_df['InputB']=final_df['InputB'].map(df2.set_index('Old_Value')['New_Value'])
print(final_df)

  ResponseID   InputA InputB
0     ABC123  CHICKEN      1
1     DEF456      COW      2
2     GHI789      DOG      3

推荐阅读