Python 将字典列表与dataframe进行比较,显示缺少的值
我有一份字典清单Python 将字典列表与dataframe进行比较,显示缺少的值,python,pandas,Python,Pandas,我有一份字典清单 example_list = [{'email':'myemail@email.com'},{'email':'another@email.com'}] 以及带有“电子邮件”列的数据框 我需要将列表与数据帧进行比较,并返回不在数据帧中的值 我当然可以遍历列表,检查数据帧,但我正在寻找一种更具python风格的方法,可能使用列表理解,或者在数据帧中使用map函数?来返回那些不在数据帧中的值。电子邮件,这里有两个选项涉及设置差异操作- np.setdiff1d set.diff
example_list = [{'email':'myemail@email.com'},{'email':'another@email.com'}]
以及带有“电子邮件”列的数据框
我需要将列表与数据帧进行比较,并返回不在数据帧中的值
我当然可以遍历列表,检查数据帧,但我正在寻找一种更具python风格的方法,可能使用列表理解,或者在数据帧中使用map函数?来返回那些不在数据帧中的值。电子邮件,这里有两个选项涉及设置差异操作-
np.setdiff1d
set.difference
一种方法是从另一个
集合中获取一个。对于功能解决方案,您可以使用运算符。itemgetter
:
from operator import itemgetter
res = set(map(itemgetter('email'), example_list)) - set(df['email'])
注-
是集合的语法糖。差异我最终将列表转换为一个数据帧,通过将两个数据帧合并到一列来比较它们,然后用缺少的值创建一个数据帧
比如说
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))]
set
方法可以使用元素散列。但是显然,df['Email']
不是预先散列的。所以我的问题是散列是隐式发生的,还是根本不发生?@jpp啊,我明白了。。。是的,在大多数情况下,像这样构建会更快,经验表明。。。试试看!下面的答案之一有用吗?如果是这样,考虑一下(左边的绿色蜱),或者要求澄清。
from operator import itemgetter
res = set(map(itemgetter('email'), example_list)) - set(df['email'])
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))]