熊猫转换类型并将无效值设置为na

问题描述:

是否可以将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不允许这种灵活性。

我想你可能有更好的运气与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

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