确定各行的唯一字典键

时间:2018-11-07 23:36:52

标签: 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行的字典键是水果,蔬菜和谷物。

上面的代码将产生

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

1 个答案:

答案 0 :(得分:2)

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

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

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