2012-06-03 66 views
31

我使用熊貓庫來讀取某些CSV數據。在我的數據中,某些列包含字符串。字符串"nan"是一個可能的值,因爲它是一個空字符串。我設法讓熊貓讀取「nan」作爲字符串,但我無法弄清楚如何讓它讀取不爲NaN的空值。這裏的樣本數據,並輸出獲取pandas.read_csv讀取空值作爲空字符串而不是nan

One,Two,Three 
a,1,one 
b,2,two 
,3,three 
d,4,nan 
e,5,five 
nan,6, 
g,7,seven 

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []}) 
    One Two Three 
0 a 1 one 
1 b 2 two 
2 NaN 3 three 
3 d 4 nan 
4 e 5 five 
5 nan 6 NaN 
6 g 7 seven 

它正確地寫着「男」爲字符串「南」,但仍讀取空單元格作爲NaN的。我試着傳遞strconverters參數read_csv(與converters={'One': str}))但它仍然讀取空單元格作爲NaN

我意識到我可以用fillna填充值後,但真的沒有辦法告訴熊貓一個特定的CSV列中的空單元格應閱讀爲空字符串代替NaN?

回答

27

我加票加排序這裏的一些選項:

https://github.com/pydata/pandas/issues/1450

在此期間,result.fillna('')應該做你想做的

編輯:在開發版本(爲0.8 .0 final)如果您指定一個空列表na_values,空字符串將保留空字符串結果

+6

[DataFrame.fillna的文檔。](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html)嘗試'result.fillna('',inplace = True )'。否則它會創建數據幀的副本。 – osa

+1

對於這樣一箇舊的答案感到遺憾,但這是否曾經發生過?據我所知,[這個GitHub PR](https:// github。com/pydata/pandas/pull/1522)它已經關閉而沒有被合併過,我在pandas版本0.14.x – drammock

+7

[Documentation](http://pandas.pydata.org/pandas- docs/stable/generated/pandas.read_csv.html)現在提供'na_values'(按列索引的列表或詞典)和'keep_default_na'(布爾)。 'keep_default_na'值指示是否應該替換或追加熊貓的默認NA值。 OP的代碼目前不起作用,僅僅是因爲它缺少了這個標誌。對於這個例子,你可以使用'pandas.read_csv('test.csv',na_values = ['nan'],keep_default_na = False)'。 – delgadom

-1

使用fillna方法,但使用兩次'nan'= 'nan','NaN'=「」。這會讓逗號排隊。 如果NAN werent那麼列不會排隊。記住:nan不等於NaN。

+1

我不明白你的答案。正如我所說,閱讀後我不想使用fillna或任何其他方法調用。我問是否有辦法在CSV閱讀操作過程中進行轉換。 – BrenBarn

+0

Downvote,真的?!你的問題不清楚。問:在CSV閱讀操作過程中進行轉換A:不,我之前問過同一個問題,因此將其刪除。你必須分兩步處理。 CSV模塊也是如此,分兩步。 – Merlin

12

在閱讀其他答案和評論後,我仍然感到困惑。但現在的答案似乎更簡單,所以你去。

由於熊貓0.9版(自2012年),可以通過簡單的設置keep_default_na=False讀取解釋爲空字符串空單元格的CSV:

pd.read_csv('test.csv', keep_default_na=False) 

這個問題在

這是修正於2012年8月19日的Pandas版本0.9在