我有一个字符串列表,其中包含我需要按最后一个或倒数第二个空格(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()])
在这种情况下。