是否可以将pandas系列值转换为特定类型并设置那些无法转换的元素?
我找到Series.astype(dtype, copy=True, raise_on_error=True)
并设置raise_on_error=True
以避免例外,但这不会将无效的项目设置为na ...
更新
更准确地说,我想指定一个列应转换为的类型。对于包含值[123, 'abc', '2010-01-01', 1.3]
和类型转换为float
的系列,我希望[123.0, nan, nan, 1.3]
作为结果,如果选择datetime
,则只会series[2]
包含有效的日期时间值。 convert_objects
不允许这种灵活性,恕我直言。
答案 0 :(得分:5)
我认为你可能会更幸运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),但效果很好,在这种情况下更明确。
阅读提及其他to_*
功能的object conversion section of the docs。
答案 1 :(得分:-1)
s.astype(int, raise_on_error=False)
s = s.apply(lambda x: x if type(x)==int else np.nan)
s = s.dropna()