2014-10-28 109 views
0

我在一系列的列中缺少值,因此命令dataframe.colname.astype("int64")會產生錯誤。在熊貓系列中將NaN轉換爲int

任何解決方法?

+0

'NaN'不能表示爲Int64因此錯誤,您可以將您的值轉換爲字符串,然後用字符串'NaN'替換缺失的值,或者將其保留爲浮點數,因爲它支持'NaN ' – EdChum 2014-10-28 19:49:59

+0

當前的'dtype'是什麼?你不能只使用'np.float64'嗎? – EdChum 2014-10-28 19:51:07

+0

實際上它是float64,但它是一個小數,並且我想最終將這些值與數據庫中的整數進行比較(它們是某種類型的ID) – user3659451 2014-10-28 19:53:00

回答

0

pd.Series的數據類型或dtype對其使用的實際方式幾乎沒有影響。

您可以有整數pd.Series,並將dtype設置爲object。你仍然可以用pd.Series做同樣的事情。

但是,如果您手動設置dtypespd.Series,則熊貓將開始在pd.Series內投射條目。根據我的經驗,這隻會導致混淆。

不要試圖在關係數據庫中使用dtypes作爲字段類型。它們不是同一件事。

如果你想要有 s/None s在pd.Series混合,只需將dtype設置爲object

設置的dtypefloat會讓你有int小號float陳述和NaN S混合。但請記住,float s爲容易被unexact in their representation

dtypes一個常見的錯誤,我應該提到的是pd.merge操作,這會悄悄地拒絕加入時使用的鍵有不同的dtypes,例如int VS object即使object只包含int s。

其他解決方法

  1. 您可以使用Series.fillna method的東西不可能填補你的NaN值。 0-1
  2. NaN s複製到新列df['was_nan'] = pd.isnull(df['floatcol']),然後使用Series.fillna method。這樣你就不會丟失任何信息。
  3. 當調用Series.astype()方法時,請爲其指定關鍵字參數raise_on_error=False,如果失敗,請使用當前的dtype。因爲dtypes並不重要。

TLDR;

不要專注於'正確的dtype',dtypes很奇怪。專注於您想要列實際執行的操作。 dtype=object很好。