如何将此数据列表插入pandas DataFrame中?
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] ]
其中“数据”是我要解析特定数据的另一个数据列表。
我有一个列名列表,该列名也从“数据”列表派生
colnames = ['USN', data[0], data[6], data[12], data[18], data[24], data[30], data[36], data[42]]
现在我需要在每列下有三个子列,所以我要这样做
cols = pd.MultiIndex.from_product([colnames, ['IA', 'EX', 'Total']])
但是当我尝试将“数据”列表插入这样的DataFrame中时
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']
这是我正在使用的数据。
答案 0 :(得分:0)
您需要将orgdata
放在方括号中,并且确保其长度等于所拥有的列数,如下所示:
df = pd.DataFrame([orgdata], columns=cols)
在创建MultiIndex
时,您将orgdata
作为25个值(即Shape of passed values is (1, 25)
)的列表进行传递。然后,您将列表colnames
(假设为)定义为长度为9的字符串列表。然后使用MultiIndex
和另外3个值列表来创建from_product()
您indices imply (27, 25)
。这里的25
源于您将orgdata
作为单个列表传递给数据框构造函数的事实,因此它将尝试将每个值解析为自己的行。您需要将其包装在方括号中,以确保将每个值分配给一列(因为构造函数中的每个列表都被解释为单行)。最后,您需要确保拥有25
列以匹配您传递的orgdata
,或在27
内部传递orgdata
值。
使用示例数据,这是一个最小的示例:
import pandas as pd
data = ['15EC41', 'LIC', '40', '60', 'P']
orgdata = ['somestring', data[0], data[1], data[2], data[3], data[4]]
colnames = ['USN', data[2]]
cols = pd.MultiIndex.from_product([colnames, ['IA', 'EX', 'Total']])
df = pd.DataFrame([orgdata], columns=cols)
收益:
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
答案 1 :(得分:0)
您用DataFrame
调用orgdata
,它是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)