2016-05-13 158 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.loadtextnp.genfromtxt都功虧一簣因各種原因(不能處理數字和字符串/包含bug除非您僅指定一個空格(」「)分隔符,我不能在這裏做)

我一直在試圖與pandas.read_csv溫控功能,但它不能識別符

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