Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定跨行的唯一字典键_Python_Python 3.x_Pandas_Loops_Dictionary - Fatal编程技术网

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'}