23

I want to replace substring icashier.alipay.com in column in df

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

to aliexpress.com.

Desire output

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

I try df['url'].replace('icashier.alipay.com', 'aliexpress.com', 'inplace=True') but it return empty dataframe.

jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
NineWasps
  • 2,081
  • 8
  • 28
  • 45

3 Answers3

42

Use replace with dict for replacing and 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
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
  • 3
    This appears only to work for a column, not for a dataframe. When I try this on a dataframe it no longer finds substrings. – kjohnsen Dec 31 '20 at 15:25
28

use str.replace to replace a substring, replace looks for exact matches unless you pass a regex pattern and param 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
EdChum
  • 376,765
  • 198
  • 813
  • 562
2

In case someone (like me) needs to replace substring in whole DataFrame:

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

or just in defined columns (and all others remain unchanged):

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)
Lukas
  • 2,034
  • 19
  • 27