2016-10-19 63 views
5

我有一個看起來像這樣的文本文件中的數據集。使用熊貓閱讀文本文件,其中一些行有空元素?

0 0CF00400 X  8 66 7D 91 6E 22 03 0F 7D  0.021650 R 
    0 18EA0080 X  3 E9 FE 00       0.022550 R 
    0 00000003 X  8 D5 64 22 E1 FF FF FF F0  0.023120 R 

我讀這使用

file_pandas = pd.read_csv(fileName, delim_whitespace = True, header = None, engine = 'python') 

,並得到了輸出

0 0 0CF00400 X 8 66 7D 91  6E 22 03 0F 7D 0.02165 
    1 0 18EA0080 X 3 E9 FE 0 0.022550 R None None None  NaN 
    2 0 00000003 X 8 D5 64 22  E1 FF FF FF F0 0.02312 

但我想這個理解爲

0 0 0CF00400 X 8 66 7D 91  6E 22 03 0F 7D 0.021650 R 
    1 0 18EA0080 X 3 E9 FE 00         0.022550 R 
    2 0 00000003 X 8 D5 64 22  E1 FF FF FF F0 0.023120 R 

我試圖消除delim_whitespace = True和更換它與delimiter = " "但它只是將上面顯示的輸出中的前四列組合起來,但它確實正確地解析了其餘數據,這意味着其餘列像原始txt文件(禁止空格中的NaN值)。

我不知道如何從這裏開始。

附註:00被解析爲僅0。有沒有辦法顯示00

+1

這看起來像一個固定寬度的文件,你可以試試'read_fwf'還你有標籤或空間在這裏?爲了保留'00',你需要傳遞'dtype = np.object' – EdChum

回答

8

好像你的數據是固定寬度的欄目,你可以嘗試pandas.read_fwf()

from io import StringIO 
import pandas as pd 

df = pd.read_fwf(StringIO("""0 0CF00400 X  8 66 7D 91 6E 22 03 0F 7D  0.021650 R 
0 18EA0080 X  3 E9 FE 00       0.022550 R 
0 00000003 X  8 D5 64 22 E1 FF FF FF F0  0.023120 R"""), 
       header = None, widths = [1,12,2,8,4,4,4,4,4,4,4,4,16,2]) 

enter image description here

+0

我試過你的方法,但是列4-11中的值全部用空格分開。像6 6,6 7等等。但是,只使用'read_fwf()'而不使用寬度參數非常有效!我只是把'00'的問題顯示爲'0'。我試過'dtype = np.object',但'dtype'不支持python引擎。有什麼建議麼? –

+1

使用'converters = {6:str}'參數來避免將列轉換爲int,嘗試使用'df = pd.read_fwf(file_name,header = None,converters = {6:str})' – Psidom

+0

能夠僅在今天嘗試這個論點,它的工作!謝謝! –

相關問題