2017-09-26 47 views
1

我有以下文件:使用熊貓讀取與標題的文本文件中多行

 OBJ    OBJ  OBJ                       
     DATE  OBJ CLASS DATE  OBJ          OBJ       OBJ   
CLASS ENTERED1 TAG REPL ENTERED2 NAME          TSTMP      USERID  
----- ---------- --- ----- ---------- ---------------------------------------- -------------------------- --------  
EZ4 2002-02-06 D   2002-02-06 abc random        2002-02-06-10.05.30.242768 2342342  
000 2001-09-27 D   2001-09-27 none          2001-09-27-10.23.31.121606 2343242  
011 1974-07-09    0001-01-01 board COMPENSATON       1997-01-22-09.10.23.145853 

列用下劃線定義和標題文本跨越多行打散。我想將它讀入熊貓數據框中,以便列文本完好無損,並刪除下劃線。我能做些什麼來獲得我正在尋找的格式的數據框?

回答

1

我會使用pd.read_fwf爲固定的寬度,但指定的'\s{2,}'

g = lambda x: '' if x.startswith('Unnamed') else x 

pd.read_fwf(
    'file.txt', 
    sep='\s{2,}', 
    header=[0, 1, 2], 
    skiprows=[3] 
).rename(columns=g) 

       OBJ  OBJ                  
       DATE OBJ CLASS  DATE    OBJ          
    CLASS ENTERED1 TAG REPL ENTERED2    NAME      TSTMP  USERID 
0 EZ4 2002-02-06 D NaN 2002-02-06   abc random 2002-02-06-10.05.30.242768 2342342.0 
1 000 2001-09-27 D NaN 2001-09-27    none 2001-09-27-10.23.31.121606 2343242.0 
2 011 1974-07-09 NaN NaN 0001-01-01 board COMPENSATON 1997-01-22-09.10.23.145853  NaN 
隔板
0

在到達下劃線之前存儲文本信息。當你到達下劃線時,保存每個「列」的開始和結束位置,然後返回並適當地連接該文本。考慮寫作一個可重複使用的功能......你需要在某一天再次做這樣的事情:-)

1

看起來前兩行和第三行是不必要的,所以通過指定skiprows屬性來跳過它們。

df = pd.read_csv('file.txt', skiprows=(0, 1, 3), sep='\s{2,}', engine='python')