API: add infer_objects for soft conversions (#16915) · pandas-dev/pandas@9e7666d (original) (raw)
`@@ -3671,16 +3671,66 @@ def convert_objects(self, convert_dates=True, convert_numeric=False,
`
3671
3671
` converted : same as input object
`
3672
3672
` """
`
3673
3673
`from warnings import warn
`
3674
``
`-
warn("convert_objects is deprecated. Use the data-type specific "
`
3675
``
`-
"converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.",
`
3676
``
`-
FutureWarning, stacklevel=2)
`
``
3674
`+
msg = ("convert_objects is deprecated. To re-infer data dtypes for "
`
``
3675
`+
"object columns, use {klass}.infer_objects()\nFor all "
`
``
3676
`+
"other conversions use the data-type specific converters "
`
``
3677
`+
"pd.to_datetime, pd.to_timedelta and pd.to_numeric."
`
``
3678
`+
).format(klass=self.class.name)
`
``
3679
`+
warn(msg, FutureWarning, stacklevel=2)
`
3677
3680
``
3678
3681
`return self._constructor(
`
3679
3682
`self._data.convert(convert_dates=convert_dates,
`
3680
3683
`convert_numeric=convert_numeric,
`
3681
3684
`convert_timedeltas=convert_timedeltas,
`
3682
3685
`copy=copy)).finalize(self)
`
3683
3686
``
``
3687
`+
def infer_objects(self):
`
``
3688
`+
"""
`
``
3689
`+
Attempt to infer better dtypes for object columns.
`
``
3690
+
``
3691
`+
Attempts soft conversion of object-dtyped
`
``
3692
`+
columns, leaving non-object and unconvertible
`
``
3693
`+
columns unchanged. The inference rules are the
`
``
3694
`+
same as during normal Series/DataFrame construction.
`
``
3695
+
``
3696
`+
.. versionadded:: 0.20.0
`
``
3697
+
``
3698
`+
See Also
`
``
3699
`+
`
``
3700
`+
pandas.to_datetime : Convert argument to datetime.
`
``
3701
`+
pandas.to_timedelta : Convert argument to timedelta.
`
``
3702
`+
pandas.to_numeric : Convert argument to numeric typeR
`
``
3703
+
``
3704
`+
Returns
`
``
3705
`+
`
``
3706
`+
converted : same type as input object
`
``
3707
+
``
3708
`+
Examples
`
``
3709
`+
`
``
3710
`+
df = pd.DataFrame({"A": ["a", 1, 2, 3]})
`
``
3711
`+
df = df.iloc[1:]
`
``
3712
`+
df
`
``
3713
`+
A
`
``
3714
`+
1 1
`
``
3715
`+
2 2
`
``
3716
`+
3 3
`
``
3717
+
``
3718
`+
df.dtypes
`
``
3719
`+
A object
`
``
3720
`+
dtype: object
`
``
3721
+
``
3722
`+
df.infer_objects().dtypes
`
``
3723
`+
A int64
`
``
3724
`+
dtype: object
`
``
3725
`+
"""
`
``
3726
`+
numeric=False necessary to only soft convert;
`
``
3727
`+
python objects will still be converted to
`
``
3728
`+
native numpy numeric types
`
``
3729
`+
return self._constructor(
`
``
3730
`+
self._data.convert(datetime=True, numeric=False,
`
``
3731
`+
timedelta=True, coerce=False,
`
``
3732
`+
copy=True)).finalize(self)
`
``
3733
+
3684
3734
`# ----------------------------------------------------------------------
`
3685
3735
`# Filling NA's
`
3686
3736
``