组合多个pandas read_csv和/或file.readline()

时间:2015-04-27 06:39:08

标签: python pandas

我正在尝试读取一个文本数据文件,它由许多连续和交替的数据块组成,每个块有N行和X列或N + 1行和Y列。

我的想法是使用pd.read_csv连续两次调用,第一次使用选项nrow=N,第二次使用nrow=N+1,但我发现这个问题我不明白

让我们考虑这个最小的例子:

#header first line
#header second line
-2.000000000000e+00 7.853981633974e-03
-1.998000000000e+00 7.853981633974e-03
-1.999000000000e+00 1.570796326795e-05 8.214081241617e-13 8.222110115758e-18 6.069302089412e+00 3.450000000000e+07 3.077971152413e+03 0.000000000000e+00 0.000000000000e+00 -6.315974034994e+02 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.000000000000e+00 8.526515773580e+06 2.736441000000e+03 

这是我用来读取数据的代码:

import pandas as pd
fp=open('test.txt')
fp.readline()#let's skip first and second line
fp.readline()
q=pd.io.parsers.read_csv(fp,nrows=2,header=None,sep=' ',names=['x_ar','a_ar'])

现在,我期待着进一步的结果:

In [4]: fp.readline()

将是最后一行,但是,我得到一个空字符串。

Out[4]: ''

发生了什么事?我该如何解决这个问题?

PS。我知道我可以用fp.readline进行迭代,但我对大熊猫解决方案很感兴趣。

1 个答案:

答案 0 :(得分:1)

  1. 关于上一个fp.readline()中的空字符串:
  2.   

    使用open(filepath)打开文件时,文件句柄迭代器为   回。迭代器适用于通过其内容的一次传递。所以   pd.io.parsers.read_csv(fp,nrows=2,header=None,sep=' ',names=['x_ar','a_ar'])读取内容并耗尽   迭代器。对pd.read_csv的后续调用认为迭代器是   空。

         

    答案改编自此   question

    1. 要处理文件顶部的评论,您可以传递comments='#',如下所示:
    2. fp=open('../test.txt')
      pd.io.parsers.read_csv(fp,nrows=2,header=None,sep=' ',names=['x_ar','a_ar'], comment='#')
      

      您的输出将是:

           x_ar   a_ar
      0   -2.000  0.007854
      1   -1.998  0.007854