我有一個通過mysql調用創建的pandas dataFrame,它將數據作爲對象類型返回。轉換熊貓數據幀類型
數據主要是數字,有一些'na'值。
我該如何轉換dataFrame的類型,以便數值適當地鍵入(浮點數),並將'na'值表示爲numpy NaN值?
我有一個通過mysql調用創建的pandas dataFrame,它將數據作爲對象類型返回。轉換熊貓數據幀類型
數據主要是數字,有一些'na'值。
我該如何轉換dataFrame的類型,以便數值適當地鍵入(浮點數),並將'na'值表示爲numpy NaN值?
使用上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)本身將無法正常工作。您必須將其分配回現有數據框。
df = df.convert_objects(convert_numeric=True)
將在大多數情況下工作。
我應該注意到這會複製數據。在初始讀取時將它更改爲數字類型將是更可取的。如果你發佈你的代碼和一個小例子,有人可能會幫助你。
這似乎不起作用,例如's = pd.Series([1,'na',3,4]); s.convert_objects(convert_numeric = True)' –
嗯,它適用於DataFrame。我猜他們沒有使用相同的啓發式重鑄?編輯:我想你給的例子沒有工作。我正在處理類似於''s = pd.DataFrame(['1','na','3','4'])的東西'''它適用於此。 – TomAugspurger
似乎沒有......例如'df = pd.DataFrame(s)':s created [github issue](https://github.com/pydata/pandas/issues/4119) –
這是湯姆建議是正確的
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
創建[問題](https://github.com/pydata/pandas/issues/4119)...我猜標準要求是否應該在此之前轉換! –
是的...正要創造一個自己.... TOTD – Jeff
您可以使用'inplace = True' –