Skip to content

Commit 1887872

Browse files
author
Mike Phung
committed
TST GH#40498 Add benchmark tests for fillna using value.
1 parent 0cbbcde commit 1887872

File tree

2 files changed

+54
-6
lines changed

2 files changed

+54
-6
lines changed

asv_bench/benchmarks/frame_methods.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ class Fillna:
374374

375375
params = (
376376
[True, False],
377-
["pad", "bfill"],
377+
[None, "pad", "bfill"],
378378
[
379379
"float64",
380380
"float32",
@@ -400,15 +400,19 @@ def setup(self, inplace, method, dtype):
400400
}
401401
self.df = DataFrame({f"col_{i}": data[dtype] for i in range(M)})
402402
self.df[::2] = None
403+
self.value = (
404+
dict(zip(self.df.columns, data[dtype][:M])) if not method else None
405+
)
403406
else:
404-
values = np.random.randn(N, M)
405-
values[::2] = np.nan
407+
data = np.random.randn(N, M)
406408
if dtype == "Int64":
407-
values = values.round()
408-
self.df = DataFrame(values, dtype=dtype)
409+
data = data.round()
410+
self.df = DataFrame({f"col_{i}": data[i] for i in range(M)})
411+
self.df[::2] = None
412+
self.value = dict(zip(self.df.columns, data[M])) if not method else None
409413

410414
def time_frame_fillna(self, inplace, method, dtype):
411-
self.df.fillna(inplace=inplace, method=method)
415+
self.df.fillna(value=self.value, inplace=inplace, method=method)
412416

413417

414418
class Dropna:

asv_bench/benchmarks/series_methods.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
NaT,
77
Series,
88
date_range,
9+
timedelta_range,
910
)
1011

1112
from .pandas_vb_common import tm
@@ -42,6 +43,49 @@ def time_nsmallest(self, keep):
4243
self.s.nsmallest(3, keep=keep)
4344

4445

46+
class Fillna:
47+
48+
params = (
49+
[True, False],
50+
[None, "pad", "bfill"],
51+
[
52+
"float64",
53+
"float32",
54+
"object",
55+
"Int64",
56+
"Float64",
57+
"datetime64[ns]",
58+
"datetime64[ns, tz]",
59+
"timedelta64[ns]",
60+
],
61+
)
62+
param_names = ["inplace", "method", "dtype"]
63+
64+
def setup(self, inplace, method, dtype):
65+
N = 10000
66+
if dtype in ("datetime64[ns]", "datetime64[ns, tz]", "timedelta64[ns]"):
67+
data = {
68+
"datetime64[ns]": date_range("2011-01-01", freq="H", periods=N),
69+
"datetime64[ns, tz]": date_range(
70+
"2011-01-01", freq="H", periods=N, tz="Asia/Tokyo"
71+
),
72+
"timedelta64[ns]": timedelta_range(start="1 day", periods=N, freq="1D"),
73+
}
74+
self.ser = Series(data[dtype])
75+
self.ser[::2] = None
76+
self.value = dict(zip(self.ser.index, data[dtype])) if not method else None
77+
else:
78+
data = np.random.randn(N)
79+
if dtype == "Int64":
80+
data = data.round()
81+
self.ser = Series(data, dtype=dtype)
82+
self.ser[::2] = None
83+
self.value = dict(zip(self.ser.index, data)) if not method else None
84+
85+
def time_series_fillna(self, inplace, method, dtype):
86+
self.ser.fillna(value=self.value, inplace=inplace, method=method)
87+
88+
4589
class Dropna:
4690

4791
params = ["int", "datetime"]

0 commit comments

Comments
 (0)