我正在使用 Python3.9 和熊貓。
我正在嘗試構建一個 DataFrame,但在執行程序中出現此錯誤:
raise ValueError(err) from err
ValueError: 13 columns passed, passed data had 14 columns
import pandas as pd
from pandas.core.frame import DataFrame
當我這樣做時:
df_printers = pd.DataFrame(printers, columns=[
'id_printer',
'serial_number',
'product_number',
'installation_date',
'product_full_name',
'country_code',
'customer_name',
'sold_to_customer_name'
'warranty_ship_to_country_code',
'warranty_active',
'warranty_start_date',
'warranty_end_date',
'number_active_contracts',
'number_active_care_packs',
])
我正在嘗試構建DataFrame,物件“列印機”是一個列印機串列,其中串列的元素有 14 個欄位,我正在傳遞同樣有 14 個欄位的“列”。
但是在執行代碼時,我得到了錯誤。

列印機是這樣的:
printers = []
printers.append([
str(serial_number) "@" str(product_number),
serial_number,
product_number,
installation_date,
product_full_name,
country_code,
customer_name,
sold_to_customer_name,
warranty_ship_to_country_code,
warranty_active,
warranty_start_date,
warranty_end_date,
number_active_contracts,
number_active_care_packs
])
如您所見,它有14 個列/欄位。
我真的沒有得到錯誤,在這兩種情況下,列/欄位的數量都是 14。
但它告訴我我正在傳遞 14 個元素,而是定義了一個包含 13 列的 DataFrame。
我在 Windows 和 Python 3.9 中使用虛擬環境。
使用 PyCharm 進行變數檢查:列印機是 5 個元素的串列。

讓我們檢查串列中的一個元素。它必須有14列。

是的!它有14列/欄位,就像 DataFrame 需要的一樣!
那么為什么我會收到此錯誤?
請在對這個問題提出負面反饋之前,給我一些關于如何改進的建議。非常感謝大家。
uj5u.com熱心網友回復:
您的列串列中缺少尾隨逗號。
columns = [
'id_printer',
'serial_number',
'product_number',
'installation_date',
'product_full_name',
'country_code',
'customer_name',
'sold_to_customer_name'
'warranty_ship_to_country_code',
'warranty_active',
'warranty_start_date',
'warranty_end_date',
'number_active_contracts',
'number_active_care_packs',
]
print(columns)
['id_printer',
'serial_number',
'product_number',
'installation_date',
'product_full_name',
'country_code',
'customer_name',
'sold_to_customer_namewarranty_ship_to_country_code',
'warranty_active',
'warranty_start_date',
'warranty_end_date',
'number_active_contracts',
'number_active_care_packs']
uj5u.com熱心網友回復:
如果我理解正確,我認為您的問題是您將串列附加到串列中,因此創建了一個長度為 1 的串列串列,即使嵌套串列中有 14 個元素。
有幾種方法可以處理這個問題。您可以通過串列索引,即進入串列項printer[0],并訪問您想要的資料。
另一種處理方式是在追加時使用串列推導解包串列。像這樣的東西:
_ = [printers.append(thing) for thing in someList]
要么
printers = [thing for thing in someList]
您可能還需要考慮創建一個單獨的串列變數,而不是在 append 方法中執行所有操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433588.html
