首页 > 解决方案 > 如何在 Python 中使用包装列读取数据?

问题描述

我正在尝试读取以下数据

     0      3177         5
 3.4275637990000E+33 7.7345239420000E+11 2.3294608630000E+21 2.0879655710000E+05
 1.9252063604938E+06 2.0037575941018E+06-1.0000000000000E+00 0.0000000000000E+00
 0.0000000000000E+00 1.1806662792899E+08 0.0000000000000E+00 1.6258263880000E+00
 0.0000000000000E+00 3.0000000000000E+00 8.7143739363190E-06 1.1806108844692E+08
 1.5216398828085E-04 1.5621014411210E+00 0.0000000000000E+00 2.9999238008221E+00
 1.0979515673726E-05 1.1805809220990E+08 2.4154974448797E-04 1.5621006577022E+00
 0.0000000000000E+00 2.9996256593782E+00 2.1960663497032E-05 1.1803176057951E+08
 9.6633451293816E-04 1.5620942285096E+00 0.0000000000000E+00 2.9994037831384E+00
 2.7670327547614E-05 1.1801096239579E+08 1.5341282126072E-03 1.5620891863088E+00
 0.0000000000000E+00 2.9990524870828E+00 3.4865681847029E-05 1.1797792540807E+08
 2.4357001431448E-03 1.5620811953515E+00 0.0000000000000E+00 2.9984939557312E+00
 4.3934518613971E-05 1.1792547175142E+08 3.8674871654846E-03 1.5620681038247E+00
 0.0000000000000E+00 2.9976271324793E+00

前 3 行是标题,后面的行是 6 个变量,这些变量一遍又一遍地重复,换句话说:

#Header line1
#Header line2
#Header line3
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6 var1 var2
 var3 var4 var5 var6
 var1 var2 var3 var4
 var5 var6

在 Python 中将所有内容收集到var1单个变量中的最佳方法是什么?

任何想法都值得赞赏。


编辑:

请注意,数字并不总是用空格分隔。当右侧的数字为负数时会发生这种情况,因为它显示第 3 行介于第 2 列和第 3 列之间。

格式始终相同1.1234567890123E+12,如果是负数,则-1.2345678901234E+12. 即点前有 1 个数字,点后有 13 个,指数中有 2 个。

标签: pythonnumpyfile-ioformatting

解决方案


我不确定这个解决方案一般有多好,但它适用于你的情况。

首先,您可能应该分别处理标题和文件的其余部分。这是数据部分。

使用 pandas 固定列文件阅读器读取数据read_fwf,跳过前三行:

import pandas as pd
import numpy as np
data = pd.read_fwf("yourfile", skiprows=2, widths=[20,20,20,20])

从数据框中提取值,将它们展平:

values = data.values.reshape(1,-1)[0]

删除空单元格,重塑为六列:

values[~np.isnan(values)].reshape(-1,6)

推荐阅读