如何在Pandas多索引Datafram中插入数据列表

2024-05-18 23:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将此数据列表插入熊猫数据框

orgdata = ['somestring', data[2], data[3], data[4], data[8], data[9], data[10], data[14], data[15], data[16], data[20], data[21], data[22], data[26], data[27], data[28], data[32], data[33], data[34], data[38], data[39], data[40], data[44], data[45], data[46] ]

其中'data'是另一个数据列表,我从中分析特定的数据。在

我有一个列名称的列表,它也是从“data”列表派生的

^{pr2}$

现在我需要在每个列下有三个子列,所以我这样做

cols = pd.MultiIndex.from_product([colnames, ['IA', 'EX', 'Total']])

但当我试图将这个“数据”列表插入这样的数据帧时

df = pd.DataFrame(orgdata, columns=cols)

我得到以下错误

ValueError: Wrong number of items passed 1, placement implies 27

我也得到了这个错误

ValueError: Shape of passed values is (1, 25), indices imply (27, 25)

我做错什么了?网上提供的文档并没有给这个主题提供太多的见解。在

有没有其他办法解决这个问题?如有任何帮助,我们将不胜感激。在

编辑:

首先,我列出了一个从我的请求中得到的“数据”列表。这是我从响应中收到的数据的一个实例。在

data = ['15EC41', 'LIC', '40', '60', 'P']

这就是我正在处理的数据。在


Tags: of数据from名称列表data错误pd
2条回答

您需要将orgdata括在括号中,并确保其长度等于您拥有的列数,如下所示:

df = pd.DataFrame([orgdata], columns=cols)

当您创建MultiIndex时,您将orgdata作为25个值的列表传递(即Shape of passed values is (1, 25))。然后将列表colnames(我假设)定义为一个长度为9的字符串列表。然后使用另一个包含3个值的列表使用from_product()创建您的MultiIndex,因此给您indices imply (27, 25)。这里的25源于这样一个事实,即您将orgdata作为单个列表传递给您的数据帧构造函数,因此它将尝试将每个单独的值解析为它自己的行。您需要用括号将其括起来,以确保每个值都将分配给一个列(因为构造函数中的每个列表都被解释为一行)。最后,您需要确保有25列来匹配传递的orgdata,或者在orgdata内传递27值。在

使用示例数据,下面是一个最小的示例:

^{pr2}$

产量:

          USN                40          
           IA      EX Total  IA  EX Total
0  somestring  15EC41   LIC  40  60     P

一个更复杂的设置索引的示例:

import pandas as pd

data1 = ['15EC41', 'LIC', '40', '60', 'P']
data2 = ['62F793', 'DUH', '52', '85', 'O']
data3 = ['9734HJ', 'IAS', '34', '94', 'D']

orgdata = [['somestring', i[0], i[1], i[2], i[3], i[4]] for i in [data1, data2, data3]]

colnames = [data1[0], data1[2]]

cols = pd.MultiIndex.from_product([colnames, ['IA', 'EX', 'Total']])

df = pd.DataFrame(orgdata, columns=cols)

USN = [0, 1, 2]

df.index = USN; df.index.name = 'USN'

产量:

         15EC41                40          
             IA      EX Total  IA  EX Total
USN                                        
0    somestring  15EC41   LIC  40  60     P
1    somestring  62F793   DUH  52  85     O
2    somestring  9734HJ   IAS  34  94     D

使用orgdata调用DataFrame,这是25项=>;df应该是25列。columns参数只指定数据的标签。因此,不匹配,columns实际上是27个项目。在

你能说明你想怎样“插入”数据(而不仅仅是标签)吗?在

我使用的最小示例:

import pandas as pd
data = range(50)
# 25 items
orgdata = ['somestring', data[2], data[3], data[4], data[8], data[9], data[10], data[14], data[15], data[16], data[20], data[21], data[22], data[26], data[27], data[28], data[32], data[33], data[34], data[38], data[39], data[40], data[44], data[45], data[46] ]
# 9 items
colnames = ['USN', data[0], data[6], data[12], data[18], data[24], data[30], data[36], data[42]]
#27 items
cols = pd.MultiIndex.from_product([colnames, ['IA', 'EX', 'Total']])
#giving error
df = pd.DataFrame(orgdata, columns=cols)

相关问题 更多 >

    热门问题