确定跨行的唯一字典键

Posted

技术标签:

【中文标题】确定跨行的唯一字典键【英文标题】:Determine unique dictionary keys across rows 【发布时间】:2019-04-11 11:27:32 【问题描述】:

我有一个数据框,其中每一行都是一个字典,但是每个字典中的键各不相同。我想遍历每一行并获得一个包含所有唯一键的列表。有谁知道怎么做?

我试过这段代码

np.unique(np.array(train.totals.apply(lambda x: ast.literal_eval(x).keys())))

但这会产生 dict_keys() 的唯一组合,而不是键的唯一组合。

例如,假设我有两行。如上所述,每一行的列值都是一个字典。第 1 行的字典键是水果和蔬菜,第 2 行的字典键是水果、蔬菜和谷物。

上面的代码会产生

dict_keys(['fruit','vegetable']) 

dict_keys(['fruit','vegetable','grain']) 

但是,我希望输出只是一个包含水果、蔬菜和谷物的列表或数组(跨行看到的唯一键)。

编辑:添加的数据框截图enter image description here

edit2:下面的代码示例

import pandas as pd 
import numpy as np
import ast

dummy_data = [['A',str("pageviews":"1","hits":"1")],['B',str("pageviews":"1","visits":"1")]]
dummy_df = pd.DataFrame(dummy_data,columns = ['ID','totals'])

np.unique(np.array(dummy_df.totals.apply(lambda x: ast.literal_eval(x).keys())))

【问题讨论】:

您能否包含一些代码来生成您的 df 或 MCVE? 欢迎来到 ***。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。 “我有一个数据框,其中每一行都是字典”可能不是一个好的设计选择。由于您几乎消除了任何有效执行此操作的机会,只需遍历每一行,并将所有键添加到 set @juanpa.arrivillaga 我试图这样做,但我不知道如何获得df 的字典。我一直只是得到一个平面数据框。 :-/ @juanpa 数据集不是我的,由第三方提供;) 【参考方案1】:

只需迭代并添加到集合中:

In [1]: import pandas as pd
   ...: import numpy as np
   ...: import ast
   ...:
   ...: dummy_data = [['A',str("pageviews":"1","hits":"1")],['B',str("pageviews":"1","visits":"1")]]
   ...: dummy_df = pd.DataFrame(dummy_data,columns = ['ID','totals'])
   ...:
   ...:

In [2]: dummy_df
Out[2]:
  ID                             totals
0  A    'pageviews': '1', 'hits': '1'
1  B  'pageviews': '1', 'visits': '1'

In [3]: uniq = set()
   ...: for x in dummy_df.totals:
   ...:     uniq.update(ast.literal_eval(x))
   ...:

In [4]: uniq
Out[4]: 'hits', 'pageviews', 'visits'

考虑到数据的结构,可能是您能做的最好的事情。

【讨论】:

以上是关于确定跨行的唯一字典键的主要内容,如果未能解决你的问题,请参考以下文章

跨行的 Oracle 哈希数据

Pandas 跨行的最小值和最大值

PoiExcel导入实现(解决跨行问题以及03和07版本问题)

HTML中 table 中的跨行跨列怎么拼写?

vscode,为什么不提示,跨行合并和跨列合并的单词

HTMLHTML 表格 ③ ( 合并单元格 | 跨行合并 | 跨列合并 | 单元格合并顺序 | 跨行设置 rowspan 属性 | 跨列设置 colspan 属性 )