用Pandas数据框架替换字符串的一部分

37

我有一个pandas数据框,需要用另一个值替换其中的一部分值。

例如,我有:

HF - Antartica
HF - America
HF - Asia

我想替换其中的HF -部分,因此结果将为

Hi Funny Antartica
Hi Funny America
Hi Funny Asia

我尝试过pd.replace(),但它不能按照我需要的方式替换字符串中的一个部分,而不是整个字符串。


2
你能展示一下DataFrame的声明吗? - RomanPerekhrest
3个回答

53

看起来你需要使用Series.replace函数:

print (df)
              val
0  HF - Antartica
1    HF - America
2       HF - Asia

print (df.val.replace({'HF -':'Hi'}, regex=True))
0    Hi Antartica
1      Hi America
2         Hi Asia
Name: val, dtype: object

str.replace 类似的解决方案:

print (df.val.str.replace('HF -', 'Hi'))
0    Hi Antartica
1      Hi America
2         Hi Asia
Name: val, dtype: object

1
+1 series.replace解决方案无论是使用regex=True还是regex=False都不能在我的数据框中进行替换。我不知道为什么,但当我使用str.replace时,它可以正常工作。 - mikey
@mikey 你可能忘记在 series.replace 命令的末尾使用 "inplace=True"。 - ACan
如果有人需要在整个数据框中替换而不是替换某个系列,请尝试使用以下代码:df.replace(regex=['HF -'], value='Hi Funny')。 - Umar Yusuf
2
str.replace(..., regex=True) is significantly faster than Series.replace(..., regex=True) - Maurício Collaça
有用的答案,想要在数据框列中替换以下字符串'. St.'。必须添加\以便点号被转义->> df.column_1.str.replace('. St.', '')。 - mapperx

18

补充@jezrael的答案,你需要包括regex=True,否则它将直接匹配。此外,这将替换数据帧中所有列中的值。如果您不打算这样做,您可以过滤到一列然后再进行替换。要在整个数据帧中替换,请尝试:

df.replace('HF', 'Hi Funny', regex=True)

您还可以提供基于模式和替换值的列表。 所有选项的完整集合在文档中提供。

因此,如果数据框如下:

>df = pd.DataFrame({'Column': ['HF - Antartica', 'HF - America', 'HF - Asia']})
>df.replace('HF', 'Hi Funny', regex=True)
应打印:
                 Column
0  Hi Funny - Antartica
1    Hi Funny - America
2       Hi Funny - Asia

-2

我想分享另一件非常重要的事情,您可以将句号“。”替换为空格和句号“。 ”为正常的句号“。”

df['label']=df.label.replace({"\. ": "."},regex=True)

@Samad,我可以从你的回答中得出一个要点。那就是在使用正则表达式时,如果要替换句号,它需要被转义为 ''。 - mapperx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接