Python 指定行格式
我想用SCEDC提供的熊猫来阅读。可能是由于历史原因,文件格式相当模糊,详见自述: 这相当于:Python 指定行格式,python,pandas,Python,Pandas,我想用SCEDC提供的熊猫来阅读。可能是由于历史原因,文件格式相当模糊,详见自述: 这相当于: #YYY MM DD HH mm SS.ss LATITUDE LONGITUDE Q MAG DEPTH NPH RMS EVID 2008 01 01 02 37 08.85 33 35.95-116 43.56 A 0.7 13.16 41 0.16 10297549 2008 01 01 05 12 06.46 33 37.12-116 39.90
#YYY MM DD HH mm SS.ss LATITUDE LONGITUDE Q MAG DEPTH NPH RMS EVID
2008 01 01 02 37 08.85 33 35.95-116 43.56 A 0.7 13.16 41 0.16 10297549
2008 01 01 05 12 06.46 33 37.12-116 39.90 A 0.8 13.03 48 0.23 10297553
2008 01 02 18 31 42.73 34 50.89-118 45.92 C 1.1 -1.28 11 0.28 10297805
虽然我不介意以空格分隔的格式,但纬度和经度列中的情况越来越糟糕:每个坐标分量都是以[度][分钟]格式给出的,例如,第一次地震为33 35.95和-116 43.56,但纬度分钟和经度33 35.95-116 43.56之间没有空格,这使得很难正确地分割线
是否有办法将模糊的a4 a2 f5.2 i3等格式提供给pandas.read_csv,以指定如何拆分和解释目录中的每一行?您可以将csv作为正常格式读取,并拆分有问题的列:
df = pd.read_clipboard(sep='\s+', header=None)
其中:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 2008 1 1 2 37 8.85 33 35.95-116 43.56 A 0.7 13.16 41 0.16 10297549
1 2008 1 1 5 12 6.46 33 37.12-116 39.90 A 0.8 13.03 48 0.23 10297553
2 2008 1 2 18 31 42.73 34 50.89-118 45.92 C 1.1 -1.28 11 0.28 10297805
如我们所见,第7列包含-,因此我们可以:
df[['a','b']] = df[7].str.split('-',expand=True)
正确重命名。Neat trick,只有一个问题:其他列可能包含负值。例如,深度有时可能是负数,这是错误的,但它仍然存在。这会弄乱你的解决方案。我已经在我的问题中添加了这样一个例子,基本上你传递给sep的是一些正则表达式模式。我试了一些,但没有达到预期效果。所以我更新了一个工作方法。
df[['a','b']] = df[7].str.split('-',expand=True)