【问题标题】:List of dict of dict to pandas pandas DataFramedict到pandas pandas DataFrame的dict列表
【发布时间】:2021-10-06 05:12:28
【问题描述】:

我想在数据框中转换 future_df:

item1 = {'name': 'A', 'parameters': [{'Parameter': 'P1', 'Value': 0.0},{'Parameter': 'P2', 'Value': 0.4}]}
item2 = {'name': 'B', 'parameters': [{'Parameter': 'P1', 'Value': 3},{'Parameter': 'P2', 'Value': 7}]}
future_df = [item1, item2]

我用丑陋的以下几行来实现这一点:

df = {}
for item in future_df:
    dic = {key['Parameter']:key['Value'] for key in item['parameters']}
    df[future_df['name']] = dic
    
df = pd.DataFrame(df.values(), index=df.keys())

我知道这是一个非常硬编码的解决方案,并且必须有一个更干净优雅的解决方案。我想 json_normalize 函数可能会有所帮助,但我没有找到正确使用它的方法。

【问题讨论】:

    标签: python pandas dataframe json-normalize


    【解决方案1】:

    技术上是单线:

    print (pd.DataFrame({i["name"]: {v["Parameter"]: v["Value"] for v in i["parameters"]}
                         for i in future_df}).T)
    
        P1   P2
    A  0.0  0.4
    B  3.0  7.0
    

    【讨论】:

      【解决方案2】:

      我不知道如果你先写一个函数来让它变宽,是否有必要更好:

      def ToDF(item):
          x = pd.DataFrame(item['parameters'])
          x.insert(0,"name",item['name'])
          return x.pivot_table(columns="Parameter",values="Value",index="name")
      

      然后像这样连接:

      df = pd.concat([ToDF(i) for i in future_df])
      df
      
      Parameter   P1   P2
      name               
      A          0.0  0.4
      B          3.0  7.0
      

      【讨论】:

        猜你喜欢
        • 2019-08-25
        • 2018-06-09
        • 2018-08-11
        • 1970-01-01
        • 2019-04-18
        • 2018-06-20
        • 2021-11-26
        • 1970-01-01
        • 2018-12-11
        相关资源
        最近更新 更多