用字典值替换 Pandas Dataframe 中的部分字符串

Posted

技术标签:

【中文标题】用字典值替换 Pandas Dataframe 中的部分字符串【英文标题】:Replace partial string in Pandas Dataframe with dictionary value 【发布时间】:2019-07-25 16:00:35 【问题描述】:

我有一个 Pandas DataFrame (df),其中一些单词包含编码替换字符。我想用字典中的替换词(翻译)替换这些词。

translations = 'gr�nn': 'gronn', 'm�nst': 'menst'
df = pd.DataFrame(["gr�nn Y", "One gr�nn", "Y m�nst/line X"])

df.replace(translations, regex=True, inplace=True)

但是,它似乎并未捕获所有实例。 当前输出:

                0
0         gronn Y
1       One gr�nn
2  Y m�nst/line X

我是否需要指定任何正则表达式模式以使替换也能捕获字符串中的部分单词?

预期输出:

                0
0         gronn Y
1       One gronn
2  Y menst/line X

【问题讨论】:

如果你只有 gronn,我建议你用 gronn 替换所有 gr.nn @Frenchy 这只是一个样本集 - 完整集包含多个变体。 如果你有一些被替换而另一些没有被替换,那意味着不同的字符 【参考方案1】:

将您的翻译转换为正则表达式查找/替换字符串:

translations = r'(.*)gr�nn(.*)': r'\1gronn\2', r'(.*)m�nst(.*)': r'\1menst\2'
df = pd.DataFrame(["gr�nn Y", "One gr�nn", "Y m�nst/line X"])
df.replace(translations, regex=True)

返回:

    0
0   gronn Y
1   One gronn
2   Y menst/line X

【讨论】:

非常好的主意。 :) +1 你假设 � 是一样的。所以 � 可以在它的视觉后面隐藏不同的值(十六进制) @Frenchy 我想在这种情况下你可以使用另一个组r'(.*)gr(.*)nn(.*)': r'\1gronn\3'

以上是关于用字典值替换 Pandas Dataframe 中的部分字符串的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

用 Pandas 将 DataFrame 中某些列和行的值替换为同一 DataFrame 中另一列的值

Python Pandas 和正则表达式使用字典替换 Dataframe 中的项目

求教pandas的dataframe索引值只有一行,用loc如何不返回series

pandas使用stack函数map函数unstack函数以及字典同时替换dataframe多个数据列的内容

Python Pandas Dataframe 用同一会话的另一个单元格的值替换单元格值