Pandas:替换字符串中的子字符串

Posted

技术标签:

【中文标题】Pandas:替换字符串中的子字符串【英文标题】:Pandas: replace substring in string 【发布时间】:2016-11-28 16:23:58 【问题描述】:

我想替换df列中的子字符串icashier.alipay.com

url
icashier.alipay.com/catalog/2758186/detail.aspx
icashier.alipay.com/catalog/2758186/detail.aspx
icashier.alipay.com/catalog/2758186/detail.aspx
vk.com

aliexpress.com

希望输出

aliexpress.com/catalog/2758186/detail.aspx
aliexpress.com/catalog/2758186/detail.aspx
aliexpress.com/catalog/2758186/detail.aspx
vk.com

我尝试df['url'].replace('icashier.alipay.com', 'aliexpress.com', 'inplace=True'),但它返回empty dataframe

【问题讨论】:

【参考方案1】:

使用replacedict 进行替换,使用regex=True

df['url'] = df['url'].replace('icashier.alipay.com': 'aliexpress.com', regex=True)
print (df)
                                          url
0  aliexpress.com/catalog/2758186/detail.aspx
1  aliexpress.com/catalog/2758186/detail.aspx
2  aliexpress.com/catalog/2758186/detail.aspx
3                                      vk.com

【讨论】:

这似乎仅适用于列,不适用于数据框。当我在数据框上尝试此操作时,它不再找到子字符串。【参考方案2】:

使用str.replace 替换子字符串,replace 查找完全匹配,除非您传递正则表达式模式和参数regex=True

In [25]:
df['url'] = df['url'].str.replace('icashier.alipay.com', 'aliexpress.com')
df['url']

Out[25]:
0    aliexpress.com/catalog/2758186/detail.aspx
1    aliexpress.com/catalog/2758186/detail.aspx
2    aliexpress.com/catalog/2758186/detail.aspx
3                                        vk.com
Name: url, dtype: object

【讨论】:

【参考方案3】:

如果有人(比如我)需要替换整个 DataFrame 中的 substring

df = df.apply(lambda col: col.str.replace('icash...', 'aliex...'))

或仅在已定义的列中(所有其他列保持不变):

cols = ['a', 'c'] # list of all columns with value to replace
df = df.apply(lambda col: col.str.replace('icash...', 'aliex...') if col.name in cols else col)

【讨论】:

对于整个数据框,也可以使用df.replace('icash...', 'aliex...', regex=True)

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

用一个值替换 Pandas 系列中的多个子字符串

用 Pandas 中的一个字符串替换一个字符串

pandas 替换(擦除)字符串中的不同字符

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

C语言中如何用一个字符串替换一个主串中的子串

python pandas用数字替换数据框中的字符串