python - 如何将出现在DataFrame中的所有特定字符串替换为Python中的另一个字符串
问题描述
我知道这个主题已经讨论了数百次,当然,我尝试了一切似乎都很好,例如
df.replace("x", "y", regex=True)
df.str.replace
方法也是,但不知何故它不适用于我的 DataFrame。
我有一个如下所示的 DataFrame
To From CC Title Body
aa@bb cc@rr; cd@ee bg@hy; rg@we jkasdf jklasdf
er@ty po@we oi@we; we@iw kljasldf kasdf
我有一些奇怪的邮件地址,例如 /o-exchange\Smith--- 因为我从组织的 Exchange 电子邮件服务器中检索了 Outlook 电子邮件数据。问题是,似乎有些人有几种类型的这种奇怪的地址,所以我想将它们更改为该特定人的唯一电子邮件。
所以我试着像
df = df.replace("weird email", "unique email", regex=True)
and
df['From'] = df['From'].str.replace("weird address", "unique address", regex=True)
但它毕竟并没有将所有奇怪的地址替换为相同的唯一地址。有没有任何pythonic方法可以将所有特定字符串替换为另一个字符串?
我的 DataFrame 的输入和输出示例如下
输入
To From CC
abc@we weird@ww long@ww; exchange@ee
weird@ww; exadress@ww long@ww long@ww; exchange@ww
我检查了特定人拥有的所有各种奇怪的地址,我编码喜欢
df = df.replace('PersonA weird address1', 'Unique addressA')
df = df.replace('PersonA weird address2', 'Unique addressA')
df = df.replace('PersonB weird address1', 'Unique addressB')
df = df.replace('PersonB weird address2', 'Unique addressB')
我想要的输出就像
To From CC
abc@we Unique@C Unique@A; Unique@B
Unique@C; exadress@ww Unique@A Unique@A; Unique@B
我列出了奇怪的地址和拥有该地址的特定人。所以我只想将所有内容整合到一个独特的地址中,就像上面一样。
解决方案
创建一个字典,其中包含您所拥有的键和所需的值,而不是在每列上使用 map
keys = ["".join(x) for x in it.permutations(["a","b","c","d"],3)]
values = ["".join(x) for x in it.permutations(["e","f","g","h"],3)]
rand_dict = {}
for k in keys:
rand_dict[k]=random.choice(values)
df = pd.DataFrame()
df["a"] = random.choices(keys,k = 10)
df["b"] = random.choices(keys,k = 10)
df["c"] = random.choices(keys,k = 10)
#till here we created a demo DataFrame
for col in df:
df[col] = df[col].map(rand_dict).fillna(df[col])
推荐阅读
- beautifulsoup - 从 div 标签中提取数据
- python - 我想在交叉表中插入列?
- php - 在 Redis 中使用 REDISQL 从表中选择数据
- python - 在不同的python包中找不到文件目录
- javascript - 如果我使用 MeteorJS 编写应用程序,我会向访问我页面的查看者公开我的代码吗?
- jsp - 自定义错误处理 404 CSS 和 JS 未加载 Java EE
- javascript - 跨多个模块共享的通用/动态组件
- java - 没有 load() 方法我无法测试单例
- authentication - Skype客户端,为什么我登录不成功?
- java - 获取泛型类的.class对象