Как читать данные с обернутыми столбцами в Python? - PullRequest
2 голосов
/ 18 марта 2019

Я пытаюсь прочитать следующие данные

     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

Какой лучший способ собрать все var1 в одну переменную в Python?

Любая идея приветствуется.


Отредактировано:

Обратите внимание, что числа не всегда разделяются пробелом. Это происходит, когда число справа отрицательное, так как оно показывает строку 3 между столбцами 2 и 3.

Всегда одинаковым является формат 1.1234567890123E+12 и, в случае отрицательного числа, -1.2345678901234E+12. Это 1 число перед точкой, 13 после точки и 2 в показателе степени.

1 Ответ

3 голосов
/ 18 марта 2019

Я не уверен, насколько хорошо это решение в целом, но оно работает в вашем случае.

Во-первых, вы, вероятно, должны обрабатывать заголовок и остальную часть файла отдельно. Вот часть данных.

Считать данные с помощью устройства чтения файлов с фиксированным столбцом 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...