2015-04-22 65 views
2

我想導入一個奇怪的格式文本文件到一個熊貓數據框。兩個例子線以下:熊貓閱讀CSV與字符串分隔符通過正則表達式

LOADED LANE  1 MAT. TYPE= 2 LEFFECT= 1 SPAN= 200. SPACE= 10. BETA= 3.474 LOADEFFECT 5075. LMAX= 3643. COV= .13 
LOADED LANE  1 MAT. TYPE= 3 LEFFECT= 1 SPAN= 200. SPACE= 10. BETA= 3.515 LOADEFFECT10009. LMAX= 9732. COV= .08 

首先,我嘗試了以下內容:

df = pd.read_csv('beta.txt', header=None, delim_whitespace=True, usecols=[2,5,7,9,11,13,15,17,19]) 

這似乎正常工作,但是弄亂當它擊中上面的例子線,那裏沒有空格後LOADEFFECT字符串(在示例中,您可能需要向右滾動一下以查看它)。我有一個像結果:

632 1 2 1 200 10 3.474 5075. 3643. 0.13 
633 1 3 1 200 10 3.515 LMAX= COV= NaN 

然後,我決定使用正則表達式來定義我的分隔符。許多試驗和錯誤運行(我在正則表達式不是專家)後,我設法親近下面一行:

df = pd.read_csv('beta.txt', header=None, sep='/s +|LOADED LANE|MAT. TYPE=|LEFFECT=|SPAN=|SPACE=|BETA=|LOADEFFECT|LMAX=|COV=', engine='python') 

這幾乎工作,但由於某種原因,在最開始創建一個NaN柱:

632 NaN 1 2 1 200 10 3.474 5075 3643 0.13 
633 NaN 1 3 1 200 10 3.515 10009 9732 0.08 

在這一點上,我想我可以刪除第一列,並擺脫它。但是我想知道設置正則表達式正確解析這個文本文件的正確方法是什麼。有任何想法嗎?除此之外,我相信有一個更聰明的方法來解析這個文本文件。我很樂意聽到你的建議。

謝謝!

+1

對我來說,這看起來更像是一個固定寬度的格式。如果您在文件中繪製垂直線,數據是否保留在正確的列中? – DSM

+0

像DSM提到的'read_fwf'可以讀取這個,如果格式是固定寬度的,它接受'width'參數,你可以傳遞每列寬度的列表 – EdChum

+0

@DSM是的,我認爲它是一個固定寬度格式文件。 – marillion

回答

0
import re 
import pandas as pd 
import csv 
csvfile = open("parsing.txt") #open text file 
reader = csv.reader(csvfile) 
new_list=[] 
for line in reader: 
    for i in line: 
     new_list.append(re.findall(r'(\d*\.\d+|\d+)', i)) 

table = pd.DataFrame(new_list) 
table # output will be pandas DataFrame with values