Is it possible to convert pandas series values to a specific type and set those elements n/a that cannot be converted?
I found Series.astype(dtype, copy=True, raise_on_error=True)
with and set raise_on_error=True
to avoid exceptions, but this won't set invalid items to na...
Update
More precisely, I want to specify the type a column should be converted to. For a series containing values [123, 'abc', '2010-01-01', 1.3]
and a type conversion to float
, I'd expect [123.0, nan, nan, 1.3]
as result, if datetime
is chosen, only the series[2]
would contain a valid datetime value. convert_objects
doesn't allow this kind of flexibility, IMHO.
I think you may have better luck with 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
Update: In more recent pandas the convert_objects
method has been deprecated.
In favor of pd.to_numeric
:
In [21]: pd.to_numeric(s, errors='coerce')
Out[21]:
0 1.0
1 2.0
2 NaN
dtype: float64
This isn't quite as powerful/magical as convert_objects
(which also worked on DataFrames) but works well and is more explicit in this case.
Read the object conversion section of the docs, where other to_*
functions are mentioned.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With