如何读取 Python 中包含换行列的数据?
How to read data with wrapped columns in 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 行是 header,后面的行是 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
的最佳方法是什么?
如有任何想法,我们将不胜感激。
已编辑:
请注意,数字并不总是由 space 分隔。当右边的数字为负数时会发生这种情况,因为它显示第 2 列和第 3 列之间的第 3 行。
格式始终相同的是 1.1234567890123E+12
,如果是负数,则为 -1.2345678901234E+12
。即点前有 1 个数字,点后有 13 个数字,指数中有 2 个数字。
我不确定这个解决方案总体上有多好,但它适用于您的情况。
首先,您应该分别处理 header 和文件的其余部分。这是数据部分。
用pandasfixed-column文件读取数据readerread_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)
我正在尝试读取以下数据
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 行是 header,后面的行是 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
的最佳方法是什么?
如有任何想法,我们将不胜感激。
已编辑:
请注意,数字并不总是由 space 分隔。当右边的数字为负数时会发生这种情况,因为它显示第 2 列和第 3 列之间的第 3 行。
格式始终相同的是 1.1234567890123E+12
,如果是负数,则为 -1.2345678901234E+12
。即点前有 1 个数字,点后有 13 个数字,指数中有 2 个数字。
我不确定这个解决方案总体上有多好,但它适用于您的情况。
首先,您应该分别处理 header 和文件的其余部分。这是数据部分。
用pandasfixed-column文件读取数据readerread_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)