Python 确定跨行的唯一字典键
我有一个数据帧,其中每一行都是一个字典,但是每个字典中的键都不同。我想迭代每一行,得到一个包含所有唯一键的列表。有人知道怎么做吗 我试过这个密码Python 确定跨行的唯一字典键,python,python-3.x,pandas,loops,dictionary,Python,Python 3.x,Pandas,Loops,Dictionary,我有一个数据帧,其中每一行都是一个字典,但是每个字典中的键都不同。我想迭代每一行,得到一个包含所有唯一键的列表。有人知道怎么做吗 我试过这个密码 np.unique(np.array(train.totals.apply(lambda x: ast.literal_eval(x).keys()))) 但这会产生dict_keys()的唯一组合,而不是唯一的键组合 例如,假设我有两行。如上所述,每行的列值是一个字典。第1行的字典键是水果和蔬菜,第2行的字典键是水果、蔬菜和谷物 上面的代码将产生
np.unique(np.array(train.totals.apply(lambda x: ast.literal_eval(x).keys())))
但这会产生dict_keys()的唯一组合,而不是唯一的键组合
例如,假设我有两行。如上所述,每行的列值是一个字典。第1行的字典键是水果和蔬菜,第2行的字典键是水果、蔬菜和谷物
上面的代码将产生
dict_keys(['fruit','vegetable'])
及
但是,我希望输出只是一个包含水果、蔬菜和谷物的列表或数组(跨行显示的唯一键)
编辑:添加了dataframe的屏幕截图
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())))
只需迭代并添加到集合:
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'}
考虑到数据的结构,这可能是您能做的最好的了。您能提供一些代码来生成df或MCVE吗?欢迎使用StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。“我有一个数据框,其中每一行都是一个字典”可能不是一个好的设计选择。由于您几乎已经排除了有效执行此操作的任何机会,只需迭代每一行,并将所有键添加到
集合
@juanpa.arrivillaga,我正试图这样做,但我不知道如何获得字典的df
。我一直得到一个扁平的数据帧-/@juanpa数据集不是我的,由第三方提供;)
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'}