2015-09-06 54 views
0

我有一個文本文件,它看起來像這樣一些數據:生產大熊貓從表中數據幀中的文本文件

(v14).K TaskList[Parameter Estimation].(Problem)Parameter Estimation.Best Value 
5.00885e-007 3.0914e+007 
5.75366e-007 2.99467e+007 
6.60922e-007 2.99199e+007 

我試圖讓這個數據到數據幀的大熊貓。我已經寫了下面的部分作品,但已經格式化的問題代碼:

def parse_PE_results(results_file): 
    with open(results_file) as f: 
     data=f.readlines() 
    parameter_value=[] 
    best_value=[] 
    for i in data: 
     split= i.split('\t') 
     parameter_value.append(split[0]) 
     best_value.append(split[1].rstrip()) 
    pv=pandas.Series(parameter_value,name=parameter_value[0]) 
    bv=pandas.Series(best_value,name=best_value[0]) 
    df=pandas.DataFrame({parameter_value[0]:pv,best_value[0]:bv}) 
    return df 

給我的感覺,必須有一個更簡單,更「Python化」從文本文件構建一個數據幀的方式。有人會碰巧知道那是什麼嗎?

+1

爲什麼不使用pd.read_csv? – shanmuga

回答

1

使用pandas.read_csv。整個parse_PE_results功能可與

df = pd.read_csv(results_file, delimiter='\t') 

更換您還可以通過使用read_csv而不是調用 data=f.readlines(),並通過它循環一行一行地享受更好的性能。

+0

這正是我正在尋找的東西 - 知道肯定有更簡單的方法。謝謝 – CiaranWelsh

+0

不幸的是,這段代碼在這種特殊情況下會產生舍入錯誤 - 因爲我正在使用非常接近0的高精度數字。您是否知道使用帶更多小數點的'pd.read_csv'的方法?我嘗試過使用'dtype = numpy.float64'作爲'read_csv'的參數,但這不起作用 – CiaranWelsh

+1

您可以使用'dtype = np.float128'來更精確地存儲浮點數。如果沒有幫助,請詳細說明經常使用但沒有說服力的短語「它沒有用」。你能修改這個例子來證明這個問題嗎? – unutbu