使用pandas.read_csv分隔列

时间:2016-05-13 00:09:57

标签: python pandas delimiter

我正在尝试从较大的.txt文件中读取一个表到python。

数据的摘录是:

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 个答案:

答案 0 :(得分:2)

正如DSM所指出的那样,这是分隔符中的拼写错误:

\s+,而不是\+s

来自the documentation中的delim_whitespace参数标题下的拼写错误。