在 csv 导入 pandas 期间跳过行

问题描述 投票:0回答:6

我正在尝试使用

pandas.read_csv()
导入 .csv 文件,但是,我不想导入数据文件的第二行(索引 = 1 的行表示 0 索引)。

我不知道如何不导入它,因为命令使用的参数似乎不明确:

来自pandas网站:

skiprows
:类似列表或整数

要跳过的行号(0-索引)或要跳过的行数(int) 文件的开头。”

如果我将

skiprows=1
放入参数中,它如何知道是跳过第一行还是跳过索引为 1 的行?

python pandas csv readfile
6个回答
195
投票

你可以自己尝试一下:

>>> import pandas as pd
>>> from io 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

32
投票

我还没有评论的声誉,但我想添加到alko答案以供进一步参考。

来自文档

skiprows:文件中要跳过的行的数字集合。也可以是一个整数来跳过前 n 行


29
投票

我在读取 csv 文件时运行跳行时遇到了同样的问题。 我正在做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

5
投票

所有这些答案都忽略了一个重要点——第 n 行是文件中的第 n 行,而不是数据集中的第 n 行。我遇到过这样的情况:我从美国地质调查局下载了一些过时的流量计数据。数据集的头部用“#”进行注释,之后的第一行是标签,接下来是描述日期类型的行,最后是数据本身。我不知道有多少注释行,但我知道前几行是什么。示例:

> # ----------------------------- WARNING ----------------------------------
> # Some of the data that you have obtained from this U.S. Geological Survey database
> # may not have received Director's approval. ... 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)

2
投票

read_csv

中的索引指的是 csv 文件中的行号/行号(第一行的索引为 0)。您可以使用以下选项来跳过行:

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
    

-3
投票

skip[1]

 将跳过第二行,而不是第一行。

© www.soinside.com 2019 - 2024. All rights reserved.