簡體   English   中英

在 csv 導入 pandas 期間跳過行

[英]Skip rows during csv import pandas

我正在嘗試使用pandas.read_csv()導入 a.csv 文件,但是,我不想導入數據文件的第二行(索引 = 1 的行用於 0 索引)。

我看不出如何不導入它,因為與命令一起使用的 arguments 似乎模棱兩可:

從 pandas 網站:

skiprows : 類似列表或 integer

在文件開頭要跳過的行號(0 索引)或要跳過的行數(int)。”

如果我在 arguments 中放入skiprows=1 ,它如何知道是跳過第一行還是跳過索引為 1 的行?

你可以自己試試:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = """1, 2
... 3, 4
... 5, 6"""
>>> pd.read_csv(StringIO(s), skiprows=[1], header=None)
   0  1
0  1  2
1  5  6
>>> pd.read_csv(StringIO(s), skiprows=1, header=None)
   0  1
0  3  4
1  5  6

我還沒有評論的聲譽,但我想添加到alko答案以供進一步參考。

文檔

skiprows:文件中要跳過的行的數字集合。 也可以是整數以跳過前 n 行

我在讀取 csv 文件時運行 skiprows 時遇到了同樣的問題。 我正在做 skip_rows=1 這行不通

簡單示例給出了如何在讀取 csv 文件時使用跳過行的想法。

import pandas as pd

#skiprows=1 will skip first line and try to read from second line
df = pd.read_csv('my_csv_file.csv', skiprows=1)  ## pandas as pd

#print the data frame
df

所有這些答案都忽略了一個重要的點——第 n 行是文件中的第 n 行,而不是數據集中的第 n 行。 我有一種情況,我從 USGS 下載了一些過時的流量測量儀數據。 數據集的頭部用“#”注釋,之后的第一行是標簽,接下來是描述日期類型的行,最后是數據本身。 我永遠不知道有多少注釋行,但我知道前幾行是什么。 例子:

- - - - - - - - - - - - - - - 警告 - - - - - - - - - - --------------

您從這個美國地質調查局數據庫中獲得的一些數據

可能沒有得到董事的批准。 ... Agency_cd site_no datetime tz_cd 139719_00065 139719_00065_cd

5s 15s 20d 6s 14n 10s USGS 08041780 2018-05-06 00:00 CDT 1.98 A

如果有一種方法可以自動跳過第 n 行和第 n 行,那就太好了。

作為說明,我能夠通過以下方式解決我的問題:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)

您有以下選項可以跳過 Pandas 中的行:

from io import StringIO

csv = \
"""col1,col2
1,a
2,b
3,c
4,d
"""
pd.read_csv(StringIO(csv))

# Output:
   col1 col2  # index 0
0     1    a  # index 1
1     2    b  # index 2
2     3    c  # index 3
3     4    d  # index 4

在文件開頭跳過兩行(索引 0 和 1)。 列名也被跳過(索引 0),頂行用於列名。 要添加列名稱,請使用names = ['col1', 'col2']參數:

pd.read_csv(StringIO(csv), skiprows=2)

# Output:
   2  b
0  3  c
1  4  d

跳過第二行和第四行(索引 1 和 3):

pd.read_csv(StringIO(csv), skiprows=[1, 3])

# Output:
   col1 col2
0     2    b
1     4    d

跳過最后兩行:

pd.read_csv(StringIO(csv), engine='python', skipfooter=2)

# Output:
   col1 col2
0     1    a
1     2    b

使用 lambda 函數跳過每一行(索引 1 和 3):

pd.read_csv(StringIO(csv), skiprows=lambda x: (x % 2) != 0)

# Output:
   col1 col2
0     2    b
1     4    d

skip[1]將跳過第二行,而不是第一行。

還要確保您的文件實際上是一個 CSV 文件。 例如,如果您有一個 .xls 文件,並且只是將文件擴展名更改為 .csv,則該文件不會導入並會出現上述錯誤。 要檢查這是否是您的問題,請在 excel 中打開文件,它可能會說:

“'Filename.csv' 的文件格式和擴展名不匹配。該文件可能已損壞或不安全。除非您信任其來源,否則請勿打開它。您還是要打開它嗎?”

修復文件:在 Excel 中打開文件,單擊“另存為”,選擇要另存為的文件格式(使用 .cvs),然后替換現有文件。

這是我的問題,並為我修復了錯誤。

暫無
暫無

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

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