我有一个字典列表
example_list = [{'email':'myemail@email.com'},{'email':'another@email.com'}]
我需要一个带有“邮箱”列的数据框,并将其与列表进行比较,返回不在数据框中的值。
我可以遍历列表,在数据框中检查,但我正在寻找一种更Pythonic的方式,也许使用列表推导式或可能在数据框中使用map函数?
np.setdiff1d
emails = [d['email'] for d in example_list)]
diff = np.setdiff1d(emails, df['Email']) # returns a list
set.difference
# returns a set
diff = set(d['email'] for d in example_list)).difference(df['Email'])
一种方法是从另一个中获取一个set
。对于功能性解决方案,您可以使用operator.itemgetter
:
from operator import itemgetter
res = set(map(itemgetter('email'), example_list)) - set(df['email'])
注意,-
是 set.difference
的语法糖。
最终我将列表转换为数据框,通过合并其中一列来比较两个数据框,并从缺失值中创建一个数据框。
例如:
example_list = [{'email':'myemail@email.com'},{'email':'another@email.com'}]
df_two = pd.DataFrame(item for item in example_list)
common = df_one.merge(df_two, on=['Email'])
df_diff = df_one[(~df_one.Email.isin(common.Email))]