熊猫:条件替换一套

时间:2018-04-25 17:16:23

标签: python pandas

我有一组常见的电子邮件地址,如下所示:

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

我应该如何制作这个面具?

谢谢!

2 个答案:

答案 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