我有一个数据框,其中每一行都是一个字典,但是每个字典中的键都不同。我想遍历每一行并获得一个包含所有唯一键的列表。有谁知道该怎么做?
我尝试了此代码
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())))
答案 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'}
考虑到数据的结构,可能是您可以做的最好的事情。