2012-09-20 81 views
7

我嘗試使用pandas.read_csv讀取缺少值的.txt文件。我的數據是這樣的格式:在python熊貓中讀取缺少值的文件

10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 

與成千上萬的樣本點相同的名稱,GPS位置和其他讀數。 我使用代碼:

myData = read_csv('~/data.txt', sep=',', na_values='') 

的代碼是錯誤的,因爲na_values不給NaN或其他指標。列應該有相同的大小,但我完成不同的長度。

我不知道在na_values之後究竟應該輸入什麼(嘗試了所有不同的事情)。 謝謝

+0

如果'skiprows = 1',那麼文件中只有一行。如果沒有這個參數,我會在DataFrame中看到清晰的'NaN'。 – eumiro

+0

我只發佈了兩行數據來顯示其格式。 skiprows = 1對丟失的數據沒有任何作用,原始文件中有15000行,第一行包含一些名稱,我不想要的。 – tomasz74

+0

爲了清晰起見,我刪除了'skiprows = 1' – tomasz74

回答

11

參數na_values必須是「列表像」(請參閱​​此answer)。

字符串是 「表像」,所以:

na_values='abc' # would transform the letters 'a', 'b' and 'c' each into `nan` 
# is equivalent to 
na_values=['a','b','c']` 

同理:

na_values='' 
# is equivalent to 
na_values=[] # and this is not what you want! 

這意味着你需要使用na_values=['']

+0

謝謝您的回答。 na_values = ['']是我第一次嘗試,但它不會產生所需的效果。如果我將參數作爲列表['']或作爲空白空間',我會得到相同的結果。 我真的不知道還有什麼要嘗試,因爲它似乎沒有自動接收缺失值,我有一個問題來指定它 – tomasz74

+1

@ tomasz74它似乎適用於我,用你的例子(沒有'skiprows' )...也許你需要'myData.T'(轉置)。 –

+0

@ tomasz74經過測試似乎'''',並與默認('None'),這只是對我很好(列是相同的大小)... –

2

你是什麼版本的熊貓?將空字符串解釋爲NaN是pandas的默認行爲,似乎在v0.7.3和當前主數據庫中的數據片段中精確地解析了空字符串,根本不使用na_values參數。

In [10]: data = """\ 
10/08/2012,12:10:10,name1,0.81,4.02,50;18.5701400N,4;07.7693770E,7.92,10.50,0.0106,4.30,0.0301 
10/08/2012,12:10:11,name2,,,,,10.87,1.40,0.0099,9.70,0.0686 
""" 

In [11]: read_csv(StringIO(data), header=None).T 
Out[11]: 
        0   1 
X.1  10/08/2012 10/08/2012 
X.2   12:10:10 12:10:11 
X.3   name1  name2 
X.4    0.81   NaN 
X.5    4.02   NaN 
X.6 50;18.5701400N   NaN 
X.7 4;07.7693770E   NaN 
X.8    7.92  10.87 
X.9    10.5   1.4 
X.10   0.0106  0.0099 
X.11    4.3   9.7 
X.12   0.0301  0.0686