Python 替换函数中的字符串通配符

Python 替换函数中的字符串通配符,python,pandas,Python,Pandas,我相信这个问题有一个简单的答案,但我很难找出正确的字符串使用。我基本上想用新域替换数据框中的任何电子邮件地址。对于特定列,将子字符串“@*”替换为“@newcompany.com”,其中*是任意字符集。我想保留在@as is之前的任何内容。 谢谢大家 df_users['EMAIL'] = df_users['EMAIL'].str.replace('@', '@newcompany.com') 您可以使用矢量化方法拆分'@'字符,然后用新域名连接左侧: In [42]: df = pd.D

我相信这个问题有一个简单的答案,但我很难找出正确的字符串使用。我基本上想用新域替换数据框中的任何电子邮件地址。对于特定列,将子字符串“@*”替换为“@newcompany.com”,其中*是任意字符集。我想保留在@as is之前的任何内容。 谢谢大家

df_users['EMAIL'] = df_users['EMAIL'].str.replace('@', '@newcompany.com')

您可以使用矢量化方法拆分
'@'
字符,然后用新域名连接左侧:

In [42]:

df = pd.DataFrame({'email':['asdsad@old.com', 'asdsa@google.com', 'hheherhe@apple.com']})
df
Out[42]:
                email
0      asdsad@old.com
1    asdsa@google.com
2  hheherhe@apple.com

In [43]:

df['email'] = df.email.str.split('@').str[0] + '@newcompany.com'
df

Out[43]:
                     email
0    asdsad@newcompany.com
1     asdsa@newcompany.com
2  hheherhe@newcompany.com
另一种方法是调用向量化的
replace
,它接受正则表达式作为字符串上的模式:

In [56]:

df['email'] = df['email'].str.replace(r'@.+', '@newcompany.com')
df
Out[56]:
                     email
0    asdsad@newcompany.com
1     asdsa@newcompany.com
2  hheherhe@newcompany.com
计时

In [58]:

%timeit df['email'] = df['email'].str.replace(r'@.+', '@newcompany.com')
1000 loops, best of 3: 632 µs per loop
In [60]:

%timeit df['email'] = df.email.str.split('@').str[0] + '@newcompany.com'
1000 loops, best of 3: 1.66 ms per loop

In [63]:

%timeit df['email'] = df['email'].replace(r'@.+', '@newcompany.com', regex=True)
1000 loops, best of 3: 738 µs per loop

在这里,我们可以看到
str.replace
regex版本比
split
方法快了近3倍,有趣的是,这个方法似乎与
str.replace
做的事情相同,但速度较慢。

这听起来像是一个工作!Pandas的
replace
将允许您使用正则表达式,您只需将其设置为true即可。你大部分时间都在那里,以下几点应该对你有用

df_用户['EMAIL'].替换('@.*$','@newcompany.com',inplace=True,regex=True)