Python Pandas读取csv跳过行但保持头部

2024-05-08 06:29:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难弄清楚如何跳过csv文件中的n行,但保留第一行的头。

我想做的是迭代,但要保持头从第一行。skiprows使头成为跳过行之后的第一行。做这个最好的方法是什么?

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

Tags: 文件csv方法testreaddatasepheader
3条回答

您可以将行号列表传递给skiprows,而不是整数。

给函数10个整数,就跳过了前10行。

要保留第一行0(作为标题),然后将其他所有内容跳到第10行,可以编写:

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

使用read_csv跳过行的其他方法

控制read_csv行使用的两种主要方法是headerskiprows参数。

Supose我们有以下一列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
    
  • 使用多行作为标题创建多索引(跳过最后一个指定标题行之前的所有行):

    >>> 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在前两行(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

相关问题 更多 >