读入包含“upper”一词的.dat文件会导致问题

时间:2018-03-06 13:32:13

标签: python pandas file

这是我用来读取.dat文件的代码:

for (int a = 0; a < LEN; a++)
{
    x += data[LEN - a - 1];
}

当数据中没有单词“upper”时,它会正确读入。文件。 但是,我会有许多.dat文件,其中包含“upper”一词会导致错误。

.dat文件如下所示:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.dat', sep='\s+')

plt.figure()
plt.plot(df['yh_center[2]'], df['tot_scale01[4]'], 'ro')
plt.xlabel('yh_center')
plt.ylabel('tot_scale01[4]')
plt.savefig('name.pdf')
plt.show()

然后在第4行,实际数据进入

#labels: yh_lower[1]   yh_center[2]   yh_upper[3]   tot_scale01[4]
#neval: 200000
#overflow:lower center upper    0.0000000000E+000    0.0000000000E+000    0.0000000000E+000    0.0000000000E+000

然后我有43行以上的数据,最后一行是

-4.4000000000E+000   -4.3000000000E+000   -4.2000000000E+000    0.0000000000E+000

(实际上有超过100列数据,但应该改变......原则应该显示前4列)

完整的错误报告是

#nx: 3

1 个答案:

答案 0 :(得分:0)

您可以通过从每行中删除任何前导文本来预先解析数据,然后再将其传递给pandas,例如:

import pandas as pd
import re

with open('data.dat') as f_input:
    header = next(f_input).split()[1:]
    next(f_input)
    next(f_input)

    data = [line.strip().split() for line in f_input]

df = pd.DataFrame(data[:-1], dtype='float', columns=header)

此版本还可以从第一行提取列名称。

如果upper仅出现在第三行(而不是整个文件中随机出现),您只需使用skiprows告诉Pandas从第四行开始阅读,就像你有在最后一行#nx: 3,使用skipfooter也可以跳过:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data.dat', sep='\s+', skiprows=3, skipfooter=1, header=None)

在Pandas 0.22.0上测试

相关问题