2013-07-03 179 views
4

我有一個通過mysql調用創建的pandas dataFrame,它將數據作爲對象類型返回。轉換熊貓數據幀類型

數據主要是數字,有一些'na'值。

我該如何轉換dataFrame的類型,以便數值適當地鍵入(浮點數),並將'na'值表示爲numpy NaN值?

回答

1

使用上dataframes替代方法:

import numpy as np 
df = DataFrame({ 
'k1': ['na'] * 3 + ['two'] * 4, 
'k2': [1, 'na', 2, 'na', 3, 4, 4]}) 

print df 

df = df.replace('na', np.nan) 

print df 

我認爲這是有幫助的指出df.replace( 'NA',np.nan)本身將無法正常工作。您必須將其分配回現有數據框。

+2

您可以使用'inplace = True' –

1

df = df.convert_objects(convert_numeric=True)將在大多數情況下工作。

我應該注意到這會複製數據。在初始讀取時將它更改爲數字類型將是更可取的。如果你發佈你的代碼和一個小例子,有人可能會幫助你。

+0

這似乎不起作用,例如's = pd.Series([1,'na',3,4]); s.convert_objects(convert_numeric = True)' –

+0

嗯,它適用於DataFrame。我猜他們沒有使用相同的啓發式重鑄?編輯:我想你給的例子沒有工作。我正在處理類似於''s = pd.DataFrame(['1','na','3','4'])的東西'''它適用於此。 – TomAugspurger

+0

似乎沒有......例如'df = pd.DataFrame(s)':s created [github issue](https://github.com/pydata/pandas/issues/4119) –

1

這是湯姆建議是正確的

In [134]: s = pd.Series(['1','2.','na']) 

In [135]: s.convert_objects(convert_numeric=True) 
Out[135]: 
0  1 
1  2 
2 NaN 
dtype: float64 

安迪指出,這並不直接工作(我認爲這是一個錯誤),所以轉換成所有字符串元素,然後再轉換

In [136]: s2 = pd.Series(['1','2.','na',5]) 

In [138]: s2.astype(str).convert_objects(convert_numeric=True) 
Out[138]: 
0  1 
1  2 
2 NaN 
3  5 
dtype: float64 
+0

創建[問題](https://github.com/pydata/pandas/issues/4119)...我猜標準要求是否應該在此之前轉換! –

+0

是的...正要創造一個自己.... TOTD – Jeff