【问题标题】:How to convert a defaultdict(list) to Pandas DataFrame如何将 defaultdict(list) 转换为 Pandas DataFrame
【发布时间】:2019-06-04 23:36:52
【问题描述】:

我有一个具有这种结构的 defaultdict(list) 对象:

{id: [list[list]]}

例如,

'a1': [[0.01, 'cat']],

'a2': [[0.09, 'cat']],

'a3': [[0.5, 'dog']],

...

我想将此defaultdict(list) 转换为Pandas DataFrame 对象。

我尝试了以下方法:

df = pd.DataFrame(list(my_dict.items()), columns=['id', 'category'])

但是,我的“类别”列出现了问题。这是列表列表的一列。我正在尝试将“类别”中的 2 个值拆分为 2 个单独的列。所以我最终的 DataFrame 列将是 ['id', 'score', 'category']。

当我尝试使用以下应用功能时:

db['category'].apply(lambda x: x[0][0])

我收到“列表索引超出范围”的错误。

我的代码可能有什么问题?如何从列表列表中创建 2 个新列?

谢谢。

【问题讨论】:

    标签: python pandas dataframe defaultdict


    【解决方案1】:

    我相信你需要:

    df = pd.DataFrame([[k] + v[0] for k, v in my_dict.items()], 
                       columns=['id', 'score', 'category'])
    

    或者:

    df = pd.DataFrame([(k, v[0][0], v[0][1]) for k, v in my_dict.items()], 
                       columns=['id', 'score', 'category'])
    

    【讨论】:

      【解决方案2】:

      使用列表推导

      例如:

      import pandas as pd
      d = {'a1': [[0.01, 'cat']], 'a2': [[0.09, 'cat']],'a3': [[0.5, 'dog']]}
      
      
      df = pd.DataFrame([[k] + j for k,v in d.items() for j in v], columns=['id', 'score', 'category'])
      print(df)
      

      输出:

         id  score category
      0  a1   0.01      cat
      1  a3   0.50      dog
      2  a2   0.09      cat
      

      【讨论】:

      • 我收到错误“只能将列表(而不是“浮动”)与上面的代码连接起来
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2013-05-25
      • 2022-09-29
      • 2017-03-17
      • 2017-03-23
      • 2013-12-24
      • 2017-07-14
      相关资源
      最近更新 更多