【问题标题】:Convert list of dictionaries to dataframe with one column for keys and one for values将字典列表转换为数据框,其中一列用于键,一列用于值
【发布时间】:2018-12-13 15:49:25
【问题描述】:

假设我有以下列表:

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

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

【问题讨论】:

    标签: python list pandas dataframe


    【解决方案1】:

    虽然@jezrael 完美回答了我的问题,但我想指出,如果您将每个字典 ({'a':1}) 转换为列表 (['a',1]),您只需使用 pd.DataFrame(list1),即可获得所需结果。

    【讨论】:

      【解决方案2】:

      如果您跨字典的键是唯一的,您可以创建一个字典并提供给pd.DataFrame.from_dict。这可以通过collections.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()))
      

      【讨论】:

        【解决方案3】:

        使用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)]
        

        【讨论】:

          猜你喜欢
          • 2021-10-13
          • 2018-07-27
          • 1970-01-01
          • 1970-01-01
          • 2020-11-06
          • 2016-05-03
          • 1970-01-01
          • 1970-01-01
          • 2021-08-24
          相关资源
          最近更新 更多