【问题标题】:List of List of Dictionary to MultiIndex Dataframe with Values具有值的字典到 MultiIndex 数据框列表的列表
【发布时间】:2018-12-25 00:47:28
【问题描述】:

我有一个字典列表列表,我想将其转换为数据框,但我似乎无法让我的代码工作。

目前,这是我的示例列表

eglist = [[{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
           {'var1': False, 'name_id': 24, 'team': 0 , 'order':1}, 
           {'var1': False, 'name_id': 1, 'team': 0 , 'order':2}],
          [{'var1': False, 'name_id': 23, 'team': 0 , 'order':0},
           {'var1': False, 'name_id': 24, 'team': 0 , 'order':1}, 
           {'var1': False, 'name_id': 1, 'team': 0 , 'order':2}]]

较大的列表有大约 9000 个字典列表。

我希望它变成

dfframe =  
      Order 0               Order 1                        Order 2 
0     var1  name_id  team   var1     name_id    team       var1   name_id    team
      False     23      0   False       24        0        False     1        0

1     var1  name_id  team   var1     name_id    team       var1   name_id    team`
      False     23      0   False       24        0        False     1        0

任何帮助都会很棒!我是初学者,因此有点不确定如何进行。

这是对已删除帖子的重新发布,因为我在该帖子中发布了不相关的代码。

【问题讨论】:

  • 你能分享你当前的代码吗? minimal reproducible example 会很棒。
  • 当然。但我认为它的当前格式太长了,它的 9000 行。我正在从 Valve API 解析匹配。奇怪的是,我的数据在使用您提供的方法时给了我一个错误:for row in L: TypeError: 'float' object is not iterable
  • 对于您的最新错误,请查看type(L)。它可能是一个浮点数而不是一个列表。
  • 感谢您的帮助!列表中缺少一些数据!想知道为什么它永远无法工作。有没有办法用.append 替换丢失的数据以使代码正常工作?
  • 我不确定。取决于数据丢失的位置,例如钥匙不见了?您可能需要问另一个问题。

标签: python python-3.x pandas dictionary dataframe


【解决方案1】:

您可以按照以下步骤操作:

  1. 使用collections.defaultdictorder 键聚合数据。
  2. 使用pd.concat 而非axis=1 转换为单个数据帧。
  3. 通过pd.MultiIndex为列添加级别。

这是一个演示:

from collections import defaultdict

# aggregate data by order
d = defaultdict(list)
for L in eglist:
    for row in L:
        d[row['order']].append([row['var1'], row['name_id'], row['team']])

# convert to dataframe
df = pd.concat([pd.DataFrame(v, columns=[f'{k}_var1', f'{k}_name_id', f'{k}_team'])
                for k, v in d.items()], axis=1)

# convert columns to MultiIndex
headers = [('Order '+col.split('_')[0], col.split('_')[-1]) for col in df.columns]
df.columns = pd.MultiIndex.from_tuples(headers, names=['Team', 'Data'])

print(df)

Team Order 0          Order 1          Order 2        
Data    var1  id team    var1  id team    var1 id team
0      False  23    0   False  24    0   False  1    0
1      False  23    0   False  24    0   False  1    0

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 2020-01-18
    • 2023-01-13
    • 2021-04-10
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多