@@ -6962,6 +6962,93 @@ def interpolate(
6962
6962
3 16.0
6963
6963
Name: d, dtype: float64
6964
6964
"""
6965
+ inplace = validate_bool_kwarg (inplace , "inplace" )
6966
+
6967
+ axis = self ._get_axis_number (axis )
6968
+
6969
+ fillna_methods = ["ffill" , "bfill" , "pad" , "backfill" ]
6970
+ should_transpose = axis == 1 and method not in fillna_methods
6971
+
6972
+ obj = self .T if should_transpose else self
6973
+
6974
+ if obj .empty :
6975
+ return self .copy ()
6976
+
6977
+ if method not in fillna_methods :
6978
+ axis = self ._info_axis_number
6979
+
6980
+ if isinstance (obj .index , MultiIndex ) and method != "linear" :
6981
+ raise ValueError (
6982
+ "Only `method=linear` interpolation is supported on MultiIndexes."
6983
+ )
6984
+
6985
+ # Set `limit_direction` depending on `method`
6986
+ if limit_direction is None :
6987
+ limit_direction = (
6988
+ "backward" if method in ("backfill" , "bfill" ) else "forward"
6989
+ )
6990
+ else :
6991
+ if method in ("pad" , "ffill" ) and limit_direction != "forward" :
6992
+ raise ValueError (
6993
+ f"`limit_direction` must be 'forward' for method `{ method } `"
6994
+ )
6995
+ if method in ("backfill" , "bfill" ) and limit_direction != "backward" :
6996
+ raise ValueError (
6997
+ f"`limit_direction` must be 'backward' for method `{ method } `"
6998
+ )
6999
+
7000
+ if obj .ndim == 2 and np .all (obj .dtypes == np .dtype (object )):
7001
+ raise TypeError (
7002
+ "Cannot interpolate with all object-dtype columns "
7003
+ "in the DataFrame. Try setting at least one "
7004
+ "column to a numeric dtype."
7005
+ )
7006
+
7007
+ # create/use the index
7008
+ if method == "linear" :
7009
+ # prior default
7010
+ index = np .arange (len (obj .index ))
7011
+ else :
7012
+ index = obj .index
7013
+ methods = {"index" , "values" , "nearest" , "time" }
7014
+ is_numeric_or_datetime = (
7015
+ is_numeric_dtype (index .dtype )
7016
+ or is_datetime64_any_dtype (index .dtype )
7017
+ or is_timedelta64_dtype (index .dtype )
7018
+ )
7019
+ if method not in methods and not is_numeric_or_datetime :
7020
+ raise ValueError (
7021
+ "Index column must be numeric or datetime type when "
7022
+ f"using { method } method other than linear. "
7023
+ "Try setting a numeric or datetime index column before "
7024
+ "interpolating."
7025
+ )
7026
+
7027
+ if isna (index ).any ():
7028
+ raise NotImplementedError (
7029
+ "Interpolation with NaNs in the index "
7030
+ "has not been implemented. Try filling "
7031
+ "those NaNs before interpolating."
7032
+ )
7033
+ new_data = obj ._mgr .interpolate (
7034
+ method = method ,
7035
+ axis = axis ,
7036
+ index = index ,
7037
+ limit = limit ,
7038
+ limit_direction = limit_direction ,
7039
+ limit_area = limit_area ,
7040
+ inplace = inplace ,
7041
+ downcast = downcast ,
7042
+ ** kwargs ,
7043
+ )
7044
+
7045
+ result = self ._constructor (new_data )
7046
+ if should_transpose :
7047
+ result = result .T
7048
+ if inplace :
7049
+ return self ._update_inplace (result )
7050
+ else :
7051
+ return result .__finalize__ (self , method = "interpolate" )
6965
7052
6966
7053
# ----------------------------------------------------------------------
6967
7054
# Timeseries methods Methods
0 commit comments