【问题标题】:Is there a way to create key-value paired dict from panda dataframe using index and column name as key?有没有办法使用索引和列名作为键从熊猫数据框中创建键值对字典?
【发布时间】:2021-11-30 07:10:03
【问题描述】:

我想通过将索引和列名组合为键,将 pandas 数据框转换为键值对字典。有什么简单的方法吗?

之前:

             T1      T2  
    apple    5       1   
    pear     2       1.5  
    banana   10      12    

之后:

{'apple_T1': 5,
 'apple_T2': 1,
 'pear_T1': 2,
  ...
 'banana_T2':12
 }

非常感谢!

【问题讨论】:

    标签: python pandas dataframe dictionary type-conversion


    【解决方案1】:

    使用DataFrame.to_dict 后跟字典理解:

    import pandas as pd
    
    data = [[5, 1], [2, 1.5], [10, 12]]
    df = pd.DataFrame(data=data, columns=["T1", "T2"], index=["apple", "pear", "banana"])
    
    result = { f"{kout}_{kin}" : value for kout, d in df.to_dict("index").items() for kin, value in d.items()}
    print(result)
    

    输出

    {'apple_T1': 5, 'apple_T2': 1.0, 'pear_T1': 2, 'pear_T2': 1.5, 'banana_T1': 10, 'banana_T2': 12.0}
    

    【讨论】:

    • 我不认为你需要强制转换为 dict:你可以逐行迭代,因为结果对象已经有一个 .items()
    【解决方案2】:

    一步到位:

    {f"{k}_{row}": v for row, data in df.iterrows() for k, v in data.items()}
    

    【讨论】:

    • 非常感谢,它有效!我不敢相信我已经坚持了一个多小时。
    • 公平地说,其他答案也可以:)如果它解决了问题,请随时接受:)
    【解决方案3】:

    您可以使用df.to_dict(orient='index')

    设置你的数据框:

    df = pd.DataFrame(
        columns=["T1", "T2"], 
        data=[[5,1], [2, 1.5], [10, 12]], 
        index=["apple", "pear", "banana"]
    )
    

    申请.to_dict方法:

    d = df.to_dict(orient='index')
    result = {f"{k1}_{k2}": v for k1 in d for k2, v in d[k1].items()}
    

    结果:

    {'apple_T1': 5,
     'apple_T2': 1,
     'banana_T1': 10,
     'banana_T2': 12,
     'pear_T1': 2,
     'pear_T2': 1.5}
    

    【讨论】:

      【解决方案4】:

      一种直接的方法是循环遍历所有的索引和列,并一个一个地定义字典项:

      df = pd.DataFrame([[5, 1], [2, 1.5], [10, 12]], 
                        columns=['T1', 'T2'], 
                        index=['apple', 'pear', 'banana'])
      new_dict = {}
      for i in df.index:
          for j in df.columns:
              new_dict[i + '_' + j] = df.loc[i, j]
      print(new_dict)
      

      输出是

      {'apple_T1': 5,
       'apple_T2': 1.0,
       'pear_T1': 2,
       'pear_T2': 1.5,
       'banana_T1': 10,
       'banana_T2': 12.0}
      

      【讨论】:

        【解决方案5】:

        你可以使用df.iterrows(),但你需要小心得到你想要的:

        >>> {f'{row}_{k}':v for row, col in df.iterrows() for k,v in list(col.items())[1:]}
        
        {'apple_T1': 5,
         'apple_T2': 1.0,
         'pear_T1': 2,
         'pear_T2': 1.5,
         'banana_T1': 10,
         'banana_T2': 12.0}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-13
          • 2017-01-15
          • 1970-01-01
          • 2019-06-29
          • 2021-05-31
          • 2019-10-21
          • 1970-01-01
          • 2017-04-28
          相关资源
          最近更新 更多