簡體   English   中英

Python Pandas read_csv跳過行但保留標題

[英]Python Pandas read_csv skip rows but keep header

我在弄清楚如何跳過csv文件中的n行但保留標題為1行時遇到了麻煩。

我想做的是迭代但保留第一行的標題。 skiprows將標題設置為跳過的行之后的第一行。 最好的方法是什么?

data = pd.read_csv('test.csv', sep='|', header=0, skiprows=10, nrows=10)

您可以通過行號到列表skiprows而不是整數。

通過給該函數提供整數10,您只需跳過前10行。

要保留第一行0(作為標題),然后將其他所有內容都跳過到第10行,可以編寫:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

使用read_csv跳過行的其他方法

控制read_csv使用哪些行的兩種主要方法是headerskiprows參數。

假設我們有以下帶有一欄的CSV文件:

a
b
c
d
e
f

在下面的每個示例中,此文件為f = io.StringIO("\\n".join("abcdef"))

  • 讀取所有行作為值(無標題,默認為整數)

     >>> pd.read_csv(f, header=None) 0 0 a 1 b 2 c 3 d 4 e 5 f 
  • 使用特定的行作為標題(跳過之前的所有行):

     >>> pd.read_csv(f, header=3) d 0 e 1 f 
  • 使用多行作為創建MultiIndex的標題(跳過最后指定的標題行之前的所有行):

     >>> pd.read_csv(f, header=[2, 4]) c e 0 f 
  • 從文件的開頭跳過N行(未跳過的第一行是標題):

     >>> pd.read_csv(f, skiprows=3) d 0 e 1 f 
  • 通過指定行索引來跳過一個或多個行(未跳過的第一行是標題):

     >>> pd.read_csv(f, skiprows=[2, 4]) a 0 b 1 d 2 f 

已經有了不錯的答案。.我某種程度上覺得有必要在這里添加廣義形式。.考慮這種情況:-

假設您的xls / csv的前2行(行#0,1)中有垃圾行。 第2行(第3行)是真正的標題,您要從第50行(即第51行)開始加載10行。這是代碼段:-

pd.read_csv('test.csv', header=2, skiprows=range(3, 50), nrows=10)

為了擴展@AlexRiley的答案, skiprows參數采用數字列表,該數字列表確定要跳過的行。 所以:

pd.read_csv('test.csv', sep='|', skiprows=range(1, 10))

是相同的:

pd.read_csv('test.csv', sep='|', skiprows=[1,2,3,4,5,6,7,8,9])

忽略特定行的最好方法是創建忽略列表(手動創建或使用諸如range的函數返回整數列表)並將其傳遞給skiprows

如果要遍歷一個長的csv文件,則可以使用chunksize參數。 如果出於某種原因需要手動執行此操作,則可以嘗試以下操作,只要知道需要執行多少次迭代即可:

for i in range(num_iters):
    pd.read_csv('test.csv', sep='|', header=0, 
                 skiprows = range(i*10 + 1, (i+1)*10), nrows=10)

如果您需要跳過/刪除特定的行,請說前3行(即0,1,2),然后再說2行(即4,5)。 您可以使用以下內容保留標題行:

df = pd.read_csv(file_in, delimiter='\t', skiprows=[0,1,2,4,5], encoding='utf-16', usecols=cols)

暫無
暫無

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

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