【问题标题】:Convert data in format [{index:value}] to a dataframe将 [{index:value}] 格式的数据转换为数据框
【发布时间】:2022-01-03 23:54:56
【问题描述】:

我有一些格式如下的数据

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

有没有办法将其转换为带有 {index: value} 的数据框

  value
a  1
b  2
c  3

我尝试了 pandas 数据框构造函数的组合,但没有成功。

  • pd.DataFrame()
  • pd.DataFrame.from_dict()
  • pd.DataFrame.from_records()

【问题讨论】:

  • 为什么你的数据是那种格式的?这似乎是存储信息的不适当方式(应该在此步骤之前修复),或者您可能期望列表的元素(字典)具有多个元素,在这种情况下,您可能不会得到体面这个简单的例子的解决方案。

标签: python pandas dataframe dictionary


【解决方案1】:

字典列表不是存储数据以创建 Dataframe 的理想格式,但如果每个字典只有一个项目,您可以尝试以下方法:

data = [{'a': 1}, {'b': 2}, {'c': 3}]
pd.DataFrame(data=[list(x.values())[0] for x in data], index=[list(x.keys())[0] for x in data])

【讨论】:

    【解决方案2】:

    元组和数据框。代码如下

    pd.DataFrame(tuple(k)).stack().to_frame('Value').droplevel(level=0)
    
    
    
        Value
    a    1.0
    b    2.0
    c    3.0
    

    【讨论】:

      【解决方案3】:

      一种方法是将您的数据转换为 pandas 可以理解的适当 dict 格式

      import pandas as pd
      
      data = [{'a':1}, {'b':2}, {'c':3}]
      data = {k: v for d in data for k, v in d.items()}
      
      pd.DataFrame.from_dict(data=data, orient='index', columns=['value'])
      

      当然

      data = [{'a':1}, {'b':2}, {'c':3}]
      
      pd.DataFrame.from_dict(
          data={k: v for d in data for k, v in d.items()},
          orient='index', columns=['value']
      )
      
      

      请注意,这仅在列表中的这些字典中没有重复键时才有效。如果您的数据如下所示,那么您应该考虑@Derek O 或@wwnde 提供的解决方案

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

      【讨论】:

        猜你喜欢
        • 2019-09-15
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-31
        • 2021-08-21
        • 2014-10-12
        相关资源
        最近更新 更多