2014-09-05 37 views
3

是否可以將pandas系列值轉換爲特定類型並設置那些不能轉換的元素n/a?熊貓轉換類型並將無效值設置爲na

我發現Series.astype(dtype, copy=True, raise_on_error=True)與和設置raise_on_error=True避免異常,但這不會設置無效項目吶......

更新

更確切地說,我想指定類型的列應該轉換爲。對於包含值[123, 'abc', '2010-01-01', 1.3]和類型轉換爲float的系列,我期望[123.0, nan, nan, 1.3]作爲結果,如果選擇datetime,則只有series[2]將包含有效的日期時間值。恕我直言,convert_objects不允許這種靈活性。

回答

4

我想你可能有更好的運氣與convert_objects

In [11]: s = pd.Series(['1', '2', 'a']) 

In [12]: s.astype(int, raise_on_error=False) # just returns s 
Out[12]: 
0 1 
1 2 
2 a 
dtype: object 

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

更新:在最近的大熊貓convert_objects方法已過時。
贊成的pd.to_numeric

In [21]: pd.to_numeric(s, errors='coerce') 
Out[21]: 
0 1.0 
1 2.0 
2 NaN 
dtype: float64 

這是不是很強大/神奇的convert_objects(其還參與了DataFrames),但運作良好,在這種情況下,更加明確。
閱讀object conversion section of the docs,其中提到其他to_*函數。

+0

這是否也適用於日期值? – orange 2014-09-05 07:23:41

+0

我剛剛看到函數簽名:'convert_objects(self,convert_dates = True,convert_numeric = False,convert_timedeltas = True,copy = True)'。真的不可能強迫它轉換成特定類型,不是嗎? – orange 2014-09-05 07:26:48

+0

漂浮物,日期,德爾塔......幾乎總是你想要這些(注意:整數不能有NaN)。 – 2014-09-05 07:28:44

-1
s.astype(int, raise_on_error=False) 
s = s.apply(lambda x: x if type(x)==int else np.nan) 
s = s.dropna() 
+0

這並沒有解決幾個問題。如果值不是數字,astype會引發錯誤。所以如果第一行出現問題,第二行和第三行將不會執行。如果第一行沒有問題,那麼第二行和第三行是不相關的。 – 2017-01-12 02:11:21