将字典列表与数据框进行比较,显示缺失值。

3

我有一个字典列表

example_list = [{'email':'myemail@email.com'},{'email':'another@email.com'}]

我需要一个带有“邮箱”列的数据框,并将其与列表进行比较,返回不在数据框中的值。

我可以遍历列表,在数据框中检查,但我正在寻找一种更Pythonic的方式,也许使用列表推导式或可能在数据框中使用map函数?


以下回答有没有帮到您?如果有,请考虑接受(左侧的绿色勾号),或者要求澄清。 - jpp
3个回答

1
为了返回那些不在DataFrame.email中的值,这里有一些涉及集合差分操作的选项——

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”方法可以利用元素的哈希。但是很明显,“df['Email']”没有预先哈希。所以我的问题是,哈希是否会隐式发生,还是根本不会发生? - jpp
@jpp,我懂你的意思...是的,在大多数情况下,这样构建会更快,经验会告诉我们...试试吧! - cs95

1

一种方法是从另一个中获取一个set。对于功能性解决方案,您可以使用operator.itemgetter

from operator import itemgetter

res = set(map(itemgetter('email'), example_list)) - set(df['email'])

注意,-set.difference 的语法糖。


0

最终我将列表转换为数据框,通过合并其中一列来比较两个数据框,并从缺失值中创建一个数据框。

例如:

    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))]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接