Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 指定行格式_Python_Pandas - Fatal编程技术网

Python 指定行格式

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

我想用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 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)