Разбор списка строк по последнему встречающемуся космическому питону - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть список строк, которые содержат пробелы, которые мне нужно проанализировать по последней или второй до последней пробел (dateTime). Я пробовал split () в основной строке, но проблема в том, что для описания данных включено много пробелов, поэтому вместо этого я решил использовать split (/ n). Ниже приведен список образцов.

['Origin Time       2016/04/16 01:25:00',
 'Lat.              32.753',
 'Long.             130.762',
 'Depth. (km)       12',
 'Mag.              7.3',
 'Station Code      AIC001',
 'Station Lat.      35.2976',
 'Station Long.     136.7500',
 'Station Height(m) 6',
 'Record Time       2016/04/16 01:28:06',
 'Sampling Freq(Hz) 100Hz',
 'Duration Time(s)  120',
 'Dir.              N-S',
 'Scale Factor      7845(gal)/8223790',
 'Max. Acc. (gal)   2.327',
 'Last Correction   2016/04/16 01:28:08'

Я не уверен, что лучший угол - это разделить первый и последний элементы этого списка, я хотел бы отделить их, чтобы я мог создать панду Dataframe из него.

1 Ответ

0 голосов
/ 13 сентября 2018

Это очень похоже на файл формата с фиксированной шириной, а не один, отформатированный с использованием разделителя.Если ваша строка pre-split находится в original, то при использовании pd.read_fwf со стандартным механизмом логического вывода «предположим, что столбцы» будет фактически работать на вашем примере:

import io, pandas as pd
df = pd.read_fwf(io.StringIO(original), header=None)

Но я думаю, что безопаснее - или, по крайней мере, более явно - указать, что ширина столбцов напрямую, через widths или colspecs.

In [55]: pd.read_fwf(io.StringIO(original), header=None, widths=[17, 100])
Out[55]: 
                    0                    1
0         Origin Time  2016/04/16 01:25:00
1                Lat.               32.753
2               Long.              130.762
3         Depth. (km)                   12
4                Mag.                  7.3
5        Station Code               AIC001
6        Station Lat.              35.2976
7       Station Long.             136.7500
8   Station Height(m)                    6
9         Record Time  2016/04/16 01:28:06
10  Sampling Freq(Hz)                100Hz
11   Duration Time(s)                  120
12               Dir.                  N-S
13       Scale Factor    7845(gal)/8223790
14    Max. Acc. (gal)                2.327
15    Last Correction  2016/04/16 01:28:08

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

FWIW, в данном случае это просто прославленная версия

df = pd.DataFrame([[row[:17].strip(), row[17:].strip()] for row in original.splitlines()])

.

...