2016-05-13 2 views
1

Я пытаюсь прочитать одну таблицу из более крупного файла .txt в python.Разделение столбцов с помощью pandas.read_csv

Выписка из данных:

2 Network magnitudes: 
    MLv  2.05 +/- 1.34 7    
    M   2.05   7 preferred 

7 Phase arrivals: 
    sta net dist azi phase time   res  wt sta 
    BMOR EC 0.0 226 P  00:22:31.385 -0.6 M 1.0 BMOR 
    BREF EC 0.0 347 P  00:22:31.543 -0.5 M 1.0 BREF 
    BTAM EC 0.0 58 P  00:22:31.796 -0.3 M 1.0 BTAM 
    BVC2 EC 0.0 26 P  00:22:33.061 0.8 M 1.0 BVC2 
    BNAS EC 0.1 294 P  00:22:32.871 -0.1 M 1.0 BNAS 
    SUCR EC 0.1 314 P  00:22:34.610 0.6 M 1.0 SUCR 
    BRRN EC 0.1 207 P  00:22:34.768 0.4 M 1.0 BRRN 

7 Station magnitudes: 
    sta net dist azi type value res  amp per 
    BMOR EC 0.0 226 MLv  1.48 -0.57 1.20076  

Я только хочу таблицу фаз заездов и так np.loadtext и np.genfromtxt и не дотягивает по различным причинам (не может иметь дело с числами и строками/содержит bug, если только вы определяете только один пробел (»«) разделитель, который я не могу здесь делать)

Я пытался с pandas.read_csv fucntion но не распознает разделители

a = pd.read_csv(datafileloc, sep='\+s', skiprows=5, skipfooter=3) 

производит:

a 
Out[90]: 
    sta net dist azi phase time   res  wt sta 
0 BMOR EC 0.0 226 P  00:22:31.385 -0....  
1 BREF EC 0.0 347 P  00:22:31.543 -0....  
2 BTAM EC 0.0 58 P  00:22:31.796 -0....  
3 BVC2 EC 0.0 26 P  00:22:33.061 0....  
4 BNAS EC 0.1 294 P  00:22:32.871 -0....  
5 SUCR EC 0.1 314 P  00:22:34.610 0....  
6 BRRN EC 0.1 207 P  00:22:34.768 0.... 

, который выглядит хорошо, кроме того, они каждый струну, и он не обратил внимание на пробельные разделители:

a.values 
Out[89]: 
array([['BMOR EC 0.0 226 P  00:22:31.385 -0.6 M 1.0 BMOR'], 
     ['BREF EC 0.0 347 P  00:22:31.543 -0.5 M 1.0 BREF'], 
     ['BTAM EC 0.0 58 P  00:22:31.796 -0.3 M 1.0 BTAM'], 
     ['BVC2 EC 0.0 26 P  00:22:33.061 0.8 M 1.0 BVC2'], 
     ['BNAS EC 0.1 294 P  00:22:32.871 -0.1 M 1.0 BNAS'], 
     ['SUCR EC 0.1 314 P  00:22:34.610 0.6 M 1.0 SUCR'], 
     ['BRRN EC 0.1 207 P  00:22:34.768 0.4 M 1.0 BRRN']], dtype=object) 

Линия может быть разделена list(a.values[0])[0].split(), но затем он будет реорганизован для получения отдельных столбцов. Я бы хотел, чтобы pandas.read_csv просто признали, что они разделены, поэтому я могу извлечь отдельные столбцы (разумно эффективный будет иметь важное значение, если я его увеличиваю)

Где я иду не так?

+1

Я не уверен, следует ли закрыть это как опечатку (вам нужно '\ s +', а не '\ + s') или как дубликат [this] (http://stackoverflow.com/questions/15026698/как к косметике сепараторе-в-чтения-CSV-более-гибкому-WRT-пробельных). – DSM

+0

Привет @DSM - Спасибо! Я только что протестировал его, и вы правы, это опечатка. Однако я взял это прямо из документации, опечатка оттуда: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html (по параметру delim_whitespace) – mjp

+0

вы правы! Я буду уверен, что это исправится. :-) – DSM

ответ

2

Как отметил DSM, это опечатка в ограничителе:

\s+, не \+s

, который пришел из опечатка в the documentation под delim_whitespace параметра заголовка.

+1

Для записи это было исправлено в багажнике с [c9ffd78] (https://github.com/pydata/pandas/commit/c9ffd7891dadd6e5590695e142f77a3476b5c4e3). – DSM

Смежные вопросы