python - 替换函数中 pandas 中的字符串通配符

标签 python pandas

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

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

最佳答案

您可以使用向量化的 str'@' 字符上拆分,然后将左侧与新域名连接起来的方法:

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 正则表达式版本比 split 方法快近 3 倍,有趣的是 Series.replace似乎与 str.replace 执行相同操作的方法速度较慢。

关于python - 替换函数中 pandas 中的字符串通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287847/

相关文章:

python - 如何在Python中将所有日语平假名转换为片假名字符?

python - Pandas - 只能将大小为 1 的数组转换为 Python 标量

python - Pandas 将数据帧附加到另一个不合并列值的数据帧

python - 没有名为 'pandas._libs.tslib' 的模块

python - 在Linux中安装SetupTools时出错

python - 自引用表 [SQLAlchemy/Alembic] 中的外键不明确

python - 如何在 Amazon EC2 上安装 python 包,如 pip、numpy - ubuntu

python - 获取列表中的倒数第二个元素

python - 在 Dask 中过滤分组 df

python - Pandas 仅对某一列进行分组和求和