2016-10-27 390 views
2

我在使用Pandas v0.18.1中的read_csv來讀取一些數據。我想選擇從CSV列和行的一個子集,所以我曾嘗試:同時使用usecols和skiprows(在Pandas read_csv中)給出錯誤

df_a = pd.read_csv(filepath, index_col = False, usecols=cols_to_use, skiprows=1) 

這給了我ValueError異常:Usecols不匹配的名字。 注意cols_to_use是列名的列表,但如果我離開了skiprows部分:

df_a = pd.read_csv(filepath, index_col = False, usecols=cols_to_use) 

它工作正常,同樣,如果我離開了usecols位,並把skiprows回來,工作正常太。

這可能是一個錯誤(你不能同時使用usecols和skiprows)?我試過查看文檔,但找不到任何提及。或者也許有一個邏輯的原因,你不能同時使用?

(此外如果有挑選出從CSV列和行的一個子集的更好/更明顯的方式,將太感激!)

提前感謝!

+3

我不確定你在做什麼。但是'cols_to_use'可以是一個列名列表,如果這些列名在一個標題行(你可能會跳過'skiprows = 1')或一個整數列表。也許你正在試圖命名你的專欄。在這種情況下,你想'names = cols_to_use'。 – piRSquared

+1

您能否提供您正在嘗試閱讀的文件示例?你能提供工作命令的輸出嗎? 我的猜測是你的文件在第一行有列名。如果使用skiprows,則pandas可能不會讀取第一行,並可能讀取第2行中的列名。 –

+0

該問題指出他希望「從csv中挑選出列和行的子集」。所以看起來'names = cols_to_use'不是要走的路。 –

回答

1

如果您的csv文件的第一行包含列名稱,則skiprows=1將忽略具有列名稱的行,並且會遇到錯誤。

如果您想要跳過特定的行,您可以使用例如「 skiprows=[1]。行號是0索引的,因此列名在行0中,第一條數據行是數字1.

相關問題