簡體   English   中英

如何將數據列表插入 Pandas 多索引數據幀

[英]How to Insert a List of Data into Pandas Multi-Index Dataframe

如何將此數據列表插入到 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']

這是我正在處理的數據類型。

您需要將orgdata在括號中確保它的長度等於您擁有的列數,如下所示:

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

創建MultiIndex ,您將orgdata作為 25 個值的列表Shape of passed values is (1, 25) (即Shape of passed values is (1, 25) )。 然后,您將列表colnames (我假設)定義為長度為 9 的字符串列表。然后您使用from_product()和另一個包含 3 個值的列表創建您的MultiIndex ,因此給您的indices imply (27, 25) 這里的25源於這樣一個事實,即您將orgdata作為單個列表傳遞給數據orgdata構造函數,因此它將嘗試將每個單獨的值解析為它自己的行。 您需要將其括在方括號中以確保每個值都將分配給一列(因為構造函數中的每個列表都被解釋為單行)。 最后,您需要確保您有25列來匹配您傳遞的orgdata ,或者在orgdata內部傳遞27值。

使用您的示例數據,這是一個最小的示例:

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

您使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM