Панды указывают формат строки - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу использовать pandas для чтения каталогов землетрясений , предоставленных SCEDC. Вероятно, по историческим причинам формат файла довольно неясен, как подробно описано в README:

col len format name comment
--- --- ------ ---- -------
 1   4    a4   year YYYY
 6   2    a2   mon  MM
 9   2    a2   day  DD
13   2    a2   hour HH  (UTC time:
16   2    a2   min  mm   7 hours ahead of Pacific Daylight Time
19   5   f5.2  sec  SS.ss    8 hours ahead of Pacific Standard Time)
    25   3    i3   lat  degrees 
    29   5   f5.2  lat      minutes 
    34   4    i4   lon  degrees  
    39   5   f5.2  lon  minutes
45   1    a1   quality  location quality
                'A'  +- 1 km horizontal distance
                     +- 2 km depth
                'B'  +- 2 km horizontal distance
                     +- 5 km depth
                'C'  +- 5 km horizontal distance
                     no depth restriction
                'D'  >+- 5 km horizontal distance
                'Z'  no quality listed in database
47   3   f3.1  magnitude
54   6   f6.2  depth    kilometers
60   3    i3   nph  number of picked phases
67   5   f5.2  rms  root mean square of travel times
73   8    i8   eventid  event ID

, что составляет:

#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

Хотя я не противв формате с разделителями пробелами все становится неприятно в столбцах LATITUDE и LONGITUDE: каждый компонент координат задан в формате [degrees] [minutes] (например, 33 35.95 и -116 43.56 для первого землетрясения), но места нетмежду широтой, минутами и градусами долготы (33 35.95-116 43.56), что затрудняет правильное разбиение линии.

Есть ли способ обеспечить этот неясный (a4 a2 f5.2 i3 и т. д.) формат для pandas.read_csv, чтобыуказать, как разбивать и интерпретировать каждую строку в каталоге?

1 Ответ

1 голос
/ 30 сентября 2019

Вы можете прочитать ваш 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)

и правильно переименовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...