首页 > 解决方案 > Pandas DataFrame 中嵌套列表的列太多错误

问题描述

我有一个嵌套列表的数据结构。pandas DataFrame 中的每个单元格都应该有一个嵌套列表。

我尝试了以下方法;

首先,我有一个标题列表:

headings = ["heading1", "heading2", "heading3", "heading4", "heading5", "heading6"]

然后我有我的数据结构:

data_list = [[foo, bar], [foo1, bar1], [foo2, bar2], [foo3, bar3], [foo4, bar4], [foo5, bar5], [bar, foo], [bar1, foo1], [bar2, foo2], [bar3, foo3], [bar4, foo4], [bar5, foo5]]

我想要实现的是创建一个 pandas 数据框,并且对于数据结构中的每 6 个项目,我们在 pandas 数据框中开始一个新行。在上面的示例中,这意味着将有两行 6 列。

到目前为止我尝试过的是以下内容;

根据数据结构的长度生成行索引:

idx =[i for i in range((len(data_list) / 6))]

然后我尝试使用列与索引生成数据框:

df = pd.DataFrame(data_list, columns=headings, index=idx)

在这种情况下,我收到以下错误:

AssertionError: 6 columns passed, passed data had 12 columns

我的问题是,如何在嵌套列表中每隔 6 项开始一个新行?

标签: pythonpandaspython-2.7dataframe

解决方案


您的 data_list 是列表格式,将其转换为 numpy 数组

import numpy as np
data_list = np.array(data_list)

现在使用 reshape 方法将数据更改为 2 行 6 列

data_list  = data_list.reshape([2,6,2])

输出:

array([[['foo', 'bar'],
        ['foo1', 'bar1'],
        ['foo2', 'bar2'],
        ['foo3', 'bar3'],
        ['foo4', 'bar4'],
        ['foo5', 'bar5']],

       [['bar', 'foo'],
        ['bar1', 'foo1'],
        ['bar2', 'foo2'],
        ['bar3', 'foo3'],
        ['bar4', 'foo4'],
        ['bar5', 'foo5']]], dtype='<U4')

推荐阅读