@@ -1244,13 +1244,14 @@ def wrapper(arr, mask, limit=None):
1244
1244
np .int64 )
1245
1245
1246
1246
1247
- def pad_1d (values , limit = None , mask = None ):
1247
+ def pad_1d (values , limit = None , mask = None , dtype = None ):
1248
1248
1249
- dtype = values .dtype .name
1249
+ if dtype is None :
1250
+ dtype = values .dtype
1250
1251
_method = None
1251
1252
if is_float_dtype (values ):
1252
- _method = getattr (algos , 'pad_inplace_%s' % dtype , None )
1253
- elif is_datetime64_dtype (values ):
1253
+ _method = getattr (algos , 'pad_inplace_%s' % dtype . name , None )
1254
+ elif dtype in _DATELIKE_DTYPES or is_datetime64_dtype (values ):
1254
1255
_method = _pad_1d_datetime
1255
1256
elif is_integer_dtype (values ):
1256
1257
values = _ensure_float64 (values )
@@ -1259,7 +1260,7 @@ def pad_1d(values, limit=None, mask=None):
1259
1260
_method = algos .pad_inplace_object
1260
1261
1261
1262
if _method is None :
1262
- raise ValueError ('Invalid dtype for pad_1d [%s]' % dtype )
1263
+ raise ValueError ('Invalid dtype for pad_1d [%s]' % dtype . name )
1263
1264
1264
1265
if mask is None :
1265
1266
mask = isnull (values )
@@ -1268,13 +1269,14 @@ def pad_1d(values, limit=None, mask=None):
1268
1269
return values
1269
1270
1270
1271
1271
- def backfill_1d (values , limit = None , mask = None ):
1272
+ def backfill_1d (values , limit = None , mask = None , dtype = None ):
1272
1273
1273
- dtype = values .dtype .name
1274
+ if dtype is None :
1275
+ dtype = values .dtype
1274
1276
_method = None
1275
1277
if is_float_dtype (values ):
1276
- _method = getattr (algos , 'backfill_inplace_%s' % dtype , None )
1277
- elif is_datetime64_dtype (values ):
1278
+ _method = getattr (algos , 'backfill_inplace_%s' % dtype . name , None )
1279
+ elif dtype in _DATELIKE_DTYPES or is_datetime64_dtype (values ):
1278
1280
_method = _backfill_1d_datetime
1279
1281
elif is_integer_dtype (values ):
1280
1282
values = _ensure_float64 (values )
@@ -1283,7 +1285,7 @@ def backfill_1d(values, limit=None, mask=None):
1283
1285
_method = algos .backfill_inplace_object
1284
1286
1285
1287
if _method is None :
1286
- raise ValueError ('Invalid dtype for backfill_1d [%s]' % dtype )
1288
+ raise ValueError ('Invalid dtype for backfill_1d [%s]' % dtype . name )
1287
1289
1288
1290
if mask is None :
1289
1291
mask = isnull (values )
@@ -1293,13 +1295,14 @@ def backfill_1d(values, limit=None, mask=None):
1293
1295
return values
1294
1296
1295
1297
1296
- def pad_2d (values , limit = None , mask = None ):
1298
+ def pad_2d (values , limit = None , mask = None , dtype = None ):
1297
1299
1298
- dtype = values .dtype .name
1300
+ if dtype is None :
1301
+ dtype = values .dtype
1299
1302
_method = None
1300
1303
if is_float_dtype (values ):
1301
- _method = getattr (algos , 'pad_2d_inplace_%s' % dtype , None )
1302
- elif is_datetime64_dtype (values ):
1304
+ _method = getattr (algos , 'pad_2d_inplace_%s' % dtype . name , None )
1305
+ elif dtype in _DATELIKE_DTYPES or is_datetime64_dtype (values ):
1303
1306
_method = _pad_2d_datetime
1304
1307
elif is_integer_dtype (values ):
1305
1308
values = _ensure_float64 (values )
@@ -1308,7 +1311,7 @@ def pad_2d(values, limit=None, mask=None):
1308
1311
_method = algos .pad_2d_inplace_object
1309
1312
1310
1313
if _method is None :
1311
- raise ValueError ('Invalid dtype for pad_2d [%s]' % dtype )
1314
+ raise ValueError ('Invalid dtype for pad_2d [%s]' % dtype . name )
1312
1315
1313
1316
if mask is None :
1314
1317
mask = isnull (values )
@@ -1322,13 +1325,14 @@ def pad_2d(values, limit=None, mask=None):
1322
1325
return values
1323
1326
1324
1327
1325
- def backfill_2d (values , limit = None , mask = None ):
1328
+ def backfill_2d (values , limit = None , mask = None , dtype = None ):
1326
1329
1327
- dtype = values .dtype .name
1330
+ if dtype is None :
1331
+ dtype = values .dtype
1328
1332
_method = None
1329
1333
if is_float_dtype (values ):
1330
- _method = getattr (algos , 'backfill_2d_inplace_%s' % dtype , None )
1331
- elif is_datetime64_dtype (values ):
1334
+ _method = getattr (algos , 'backfill_2d_inplace_%s' % dtype . name , None )
1335
+ elif dtype in _DATELIKE_DTYPES or is_datetime64_dtype (values ):
1332
1336
_method = _backfill_2d_datetime
1333
1337
elif is_integer_dtype (values ):
1334
1338
values = _ensure_float64 (values )
@@ -1337,7 +1341,7 @@ def backfill_2d(values, limit=None, mask=None):
1337
1341
_method = algos .backfill_2d_inplace_object
1338
1342
1339
1343
if _method is None :
1340
- raise ValueError ('Invalid dtype for backfill_2d [%s]' % dtype )
1344
+ raise ValueError ('Invalid dtype for backfill_2d [%s]' % dtype . name )
1341
1345
1342
1346
if mask is None :
1343
1347
mask = isnull (values )
@@ -1503,7 +1507,7 @@ def _interpolate_scipy_wrapper(x, y, new_x, method, fill_value=None,
1503
1507
return new_y
1504
1508
1505
1509
1506
- def interpolate_2d (values , method = 'pad' , axis = 0 , limit = None , fill_value = None ):
1510
+ def interpolate_2d (values , method = 'pad' , axis = 0 , limit = None , fill_value = None , dtype = None ):
1507
1511
""" perform an actual interpolation of values, values will be make 2-d if
1508
1512
needed fills inplace, returns the result
1509
1513
"""
@@ -1525,9 +1529,9 @@ def interpolate_2d(values, method='pad', axis=0, limit=None, fill_value=None):
1525
1529
1526
1530
method = _clean_fill_method (method )
1527
1531
if method == 'pad' :
1528
- values = transf (pad_2d (transf (values ), limit = limit , mask = mask ))
1532
+ values = transf (pad_2d (transf (values ), limit = limit , mask = mask , dtype = dtype ))
1529
1533
else :
1530
- values = transf (backfill_2d (transf (values ), limit = limit , mask = mask ))
1534
+ values = transf (backfill_2d (transf (values ), limit = limit , mask = mask , dtype = dtype ))
1531
1535
1532
1536
# reshape back
1533
1537
if ndim == 1 :
0 commit comments