通过最后一个出现的空格 python 解析字符串列表



我有一个字符串列表,其中包含我需要按最后一个或倒数第二个空格(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'

我不确定最好的角度是拆分此列表的第一个和最后一个元素,我想将它们分开,以便我可以从中创建熊猫数据帧。

这看起来很像一个固定宽度的格式化文件,而不是使用分隔符格式化的文件。 如果您的预拆分字符串在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()])

在这种情况下。