将字典列表转换为数据框,其中一列用于键,一列用于值

时间:2018-07-05 08:28:36

标签: python list pandas dataframe

假设我有以下列表:

list1 = [{'a': 1}, {'b': 2}, {'c': 3}]

我想将其转换为具有两列的熊猫数据框:一列用于键,一列用于值。

    keys    values
0    'a'      1
1    'b'      2
2    'c'      3

为此,我尝试使用pd.DataFrame(list1)pd.DataFrame.from_records(list1),但是在两种情况下,我都得到一个数据框,如:

     a    b    c
0  1.0  NaN  NaN
1  NaN  2.0  NaN
2  NaN  NaN  3.0

有什么方法可以指定我想要的吗?通过研究,我只能找到上面描述的方式。

3 个答案:

答案 0 :(得分:4)

使用list comprehension进行平整以获取元组列表:

df = pd.DataFrame([(i, j) for a in list1 for i, j in a.items()], 
                   columns=['keys','values'])
print (df)
  keys  values
0    a       1
1    b       2
2    c       3

详细信息

print ([(i, j) for a in list1 for i, j in a.items()])

[('a', 1), ('b', 2), ('c', 3)]

答案 1 :(得分:2)

如果您在字典中使用的键是唯一的,则可以创建一个字典并将其馈送到pd.DataFrame.from_dictcollections.ChainMap可以促进这一点:

from collections import ChainMap

list1 = [{'a': 1}, {'b': 2}, {'c': 3}]

df = pd.DataFrame.from_dict(ChainMap(*list1), orient='index').reset_index()

df.columns = ['key', 'value']

print(df)

  key  value
0   a      1
1   b      2
2   c      3

或者,您也可以通过列表直接向pd.DataFrame构造函数供稿:

df = pd.DataFrame(list(ChainMap(*list1).items()))

答案 2 :(得分:0)

@jezrael完美回答了我的问题,但我想指出的是,如果将每个字典({'a':1})转换为列表(['a',1]),则只需要使用{{1 }},获得理想的结果。