我有一组常见的电子邮件地址,如下所示:
common_addresses = set(["yahoo.com", "gmail.com", "hotmail.com"])
我有一个Pandas DataFrame,df
,如下所示:
id email_domain
1 yahoo.com
2 gmail.com
3 unk.com
4 new.com
我想用“罕见”替换不在common_addresses
中的电子邮件。这是我的尝试:
mask = df.email_domain not in common_addresses
df.loc[mask, "email_domain"] = "rare"
我在mask = ...
行上收到如下错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
我应该如何制作这个面具?
谢谢!
答案 0 :(得分:5)
你快到了。对于系列,您希望使用.isin()
来检查成员资格。在您的情况下,您应该将代码更改为:
mask = ~df.email_domain.isin(common_addresses)
df.loc[mask, "email_domain"] = "rare"
此外,您需要使用~
运算符(而不是not
)来操作系列。
答案 1 :(得分:1)
另一种方法是使用
df['email_domain'] = df.email_domain.where(df.email_domain.isin(common_addresses), 'rare')
df
输出:
id email_domain
0 1 yahoo.com
1 2 gmail.com
2 3 rare
3 4 rare