熊猫:读取文件的头部和中间

时间:2015-12-24 11:08:12

标签: python csv pandas

我刚从Python开始使用Pandas,到目前为止非常好。

我有一个大的cvs文件,我想只阅读其中的一部分。通过read_csv文档(link),选项skiprows会显示:

  

skiprows:list-like或integer,默认无

     

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

起初我以为我可以用它来读取我的cvs文件的第一部分,处理它,然后读取第二部分,依此类推。但是,当我读取第二部分时,标题不存在(因为标题行被跳过)。

我尝试header=0,但正如文档所述:

  

header = 0表示第一行数据而不是文件的第一行。

然后我看到它可以读取文件块。听起来不错,但文档对我来说并不是那么清楚,所以这是我的问题:

  1. 对于每个块,行索引是否从前一个块的值加1继续,还是重新启动为零?
  2. 是否为每个块设置了标题?
  3. 是否可以将read_csv命令与skiprows选项一起使用,并仍然在文件的第一行读取头部? (我仍然可以打开文件,阅读第一行并将其用作names选项中的标题,但我不是很喜欢这个。)

1 个答案:

答案 0 :(得分:1)

数目:

  1. 每个块重启为零
  2. 没有
  3. 对于问题3,您可以使用以下内容来保留标题的第一行:

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

    正如@iled在评论中指出的那样,看看带有块的示例。例如:

    import pandas as pd
    import numpy as np
    from io import StringIO
    
    np.random.seed(10)
    
    df1 = pd.DataFrame(np.random.randn(10,5), columns=['a','b','c','d','e'])
    
    In [29]: df1
    Out[29]: 
              a         b         c         d         e
    0  1.331587  0.715279 -1.545400 -0.008384  0.621336
    1 -0.720086  0.265512  0.108549  0.004291 -0.174600
    2  0.433026  1.203037 -0.965066  1.028274  0.228630
    3  0.445138 -1.136602  0.135137  1.484537 -1.079805
    4 -1.977728 -1.743372  0.266070  2.384967  1.123691
    5  1.672622  0.099149  1.397996 -0.271248  0.613204
    6 -0.267317 -0.549309  0.132708 -0.476142  1.308473
    7  0.195013  0.400210 -0.337632  1.256472 -0.731970
    8  0.660232 -0.350872 -0.939433 -0.489337 -0.804591
    9 -0.212698 -0.339140  0.312170  0.565153 -0.147420
    
    data = df1.to_string(index=False)
    # In your case you don't need sep because you are reading the ordinarily csv file 
    chunks = pd.read_csv(StringIO(data), sep='\s+', chunksize=3)
    
    In [40]: for chunk in chunks:
       ....:     print(chunk)
       ....:     
              a         b         c         d         e
    0  1.331587  0.715279 -1.545400 -0.008384  0.621336
    1 -0.720086  0.265512  0.108549  0.004291 -0.174600
    2  0.433026  1.203037 -0.965066  1.028274  0.228630
              a         b         c         d         e
    0  0.445138 -1.136602  0.135137  1.484537 -1.079805
    1 -1.977728 -1.743372  0.266070  2.384967  1.123691
    2  1.672622  0.099149  1.397996 -0.271248  0.613204
              a         b         c         d         e
    0 -0.267317 -0.549309  0.132708 -0.476142  1.308473
    1  0.195013  0.400210 -0.337632  1.256472 -0.731970
    2  0.660232 -0.350872 -0.939433 -0.489337 -0.804591
              a        b        c         d        e
    0 -0.212698 -0.33914  0.31217  0.565153 -0.14742