我正在尝试读取一个文本数据文件,它由许多连续和交替的数据块组成,每个块有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
进行迭代,但我对大熊猫解决方案很感兴趣。
答案 0 :(得分:1)
fp.readline()
中的空字符串:使用
open(filepath)
打开文件时,文件句柄迭代器为 回。迭代器适用于通过其内容的一次传递。所以pd.io.parsers.read_csv(fp,nrows=2,header=None,sep=' ',names=['x_ar','a_ar'])
读取内容并耗尽 迭代器。对pd.read_csv的后续调用认为迭代器是 空。答案改编自此 question
comments='#'
,如下所示: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