Skip to content

Commit 4493e08

Browse files
committed
Updated fill_value test case, Updated whatsnew
1 parent 7273396 commit 4493e08

File tree

2 files changed

+22
-29
lines changed

2 files changed

+22
-29
lines changed

doc/source/whatsnew/v3.0.0.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,10 @@ Other enhancements
200200
- :class:`Holiday` has gained the constructor argument and field ``exclude_dates`` to exclude specific datetimes from a custom holiday calendar (:issue:`54382`)
201201
- :class:`Rolling` and :class:`Expanding` now support ``nunique`` (:issue:`26958`)
202202
- :class:`Rolling` and :class:`Expanding` now support aggregations ``first`` and ``last`` (:issue:`33155`)
203-
- :class:`StringDtype` now supports addition to Series/DataFrame with strings (:issue:`61581`)
204-
203+
- :class:`StringDtype` now supports addition while maintaining element typing (:issue:`61581`)
205204
- :func:`read_parquet` accepts ``to_pandas_kwargs`` which are forwarded to :meth:`pyarrow.Table.to_pandas` which enables passing additional keywords to customize the conversion to pandas, such as ``maps_as_pydicts`` to read the Parquet map data type as python dictionaries (:issue:`56842`)
206205
- :meth:`.DataFrameGroupBy.transform`, :meth:`.SeriesGroupBy.transform`, :meth:`.DataFrameGroupBy.agg`, :meth:`.SeriesGroupBy.agg`, :meth:`.SeriesGroupBy.apply`, :meth:`.DataFrameGroupBy.apply` now support ``kurt`` (:issue:`40139`)
206+
- :meth:`DataFrame.add` now supports string addition with null-likes (:issue:`61581`)
207207
- :meth:`DataFrame.apply` supports using third-party execution engines like the Bodo.ai JIT compiler (:issue:`60668`)
208208
- :meth:`DataFrame.iloc` and :meth:`Series.iloc` now support boolean masks in ``__getitem__`` for more consistent indexing behavior (:issue:`60994`)
209209
- :meth:`DataFrame.to_csv` and :meth:`Series.to_csv` now support Python's new-style format strings (e.g., ``"{:.6f}"``) for the ``float_format`` parameter, in addition to old-style ``%`` format strings and callables. This allows for more flexible and modern formatting of floating point numbers when exporting to CSV. (:issue:`49580`)

pandas/tests/frame/test_arithmetic.py

Lines changed: 20 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ def test_arith_flex_frame_corner(self, float_frame):
627627
tm.assert_frame_equal(result, expected)
628628

629629
@pytest.mark.parametrize("axis", [0, 1])
630-
def test_arith_flex_frame_fill_value_corner(self, float_frame, axis):
630+
def test_arith_flex_frame_fill_value_series(self, float_frame, axis):
631631
rng = np.random.default_rng(60)
632632
mask = rng.random(float_frame.shape) < 0.2
633633
left = float_frame.mask(mask)
@@ -2237,8 +2237,8 @@ def test_mixed_col_index_dtype(string_dtype_no_object):
22372237

22382238

22392239
dt_params = [
2240-
(tm.ALL_INT_NUMPY_DTYPES[0], 5),
2241-
(tm.ALL_INT_EA_DTYPES[0], 5),
2240+
(tm.ALL_INT_NUMPY_DTYPES[0], 10),
2241+
(tm.ALL_INT_EA_DTYPES[0], 10),
22422242
(tm.FLOAT_NUMPY_DTYPES[0], 4.9),
22432243
(tm.FLOAT_EA_DTYPES[0], 4.9),
22442244
]
@@ -2250,45 +2250,38 @@ def test_mixed_col_index_dtype(string_dtype_no_object):
22502250
"data_type,fill_val, axis",
22512251
[(dt, val, axis) for axis in axes for dt, val in dt_params],
22522252
)
2253-
def test_df_fill_value_dtype(data_type, fill_val, axis):
2253+
def test_df_mul_array_fill_value(data_type, fill_val, axis):
22542254
# GH 61581
2255-
base_data = np.arange(25).reshape(5, 5)
2256-
mult_list = [1, np.nan, 5, np.nan, 3]
2257-
np_int_flag = 0
2255+
base_data = np.arange(12).reshape(4, 3)
2256+
df = DataFrame(base_data)
2257+
mult_list = [np.nan, 1, 5, np.nan]
2258+
mult_list = mult_list[: df.shape[axis]]
22582259

2259-
try:
2260-
mult_data = pd.array(mult_list, dtype=data_type)
2261-
except ValueError as e:
2262-
# Numpy int type cannot represent NaN, it will end up here
2263-
if "cannot convert float NaN to integer" in str(e):
2264-
mult_data = np.asarray(mult_list)
2265-
np_int_flag = 1
2260+
if data_type in tm.ALL_INT_NUMPY_DTYPES:
2261+
# Numpy int type cannot represent NaN
2262+
mult_np = np.asarray(mult_list)
2263+
mult_list = np.nan_to_num(mult_np, nan=fill_val)
22662264

2267-
columns = list("ABCDE")
2268-
df = DataFrame(base_data, columns=columns)
2265+
mult_data = pd.array(mult_list, dtype=data_type)
22692266

22702267
for i in range(df.shape[0]):
22712268
try:
22722269
df.iat[i, i] = np.nan
2273-
df.iat[i + 1, i] = pd.NA
2274-
df.iat[i + 3, i] = pd.NA
2270+
df.iat[i + 2, i] = pd.NA
22752271
except IndexError:
22762272
pass
22772273

2278-
mult_mat = np.broadcast_to(mult_data, df.shape)
22792274
if axis == 0:
2280-
mask = np.isnan(mult_mat).T
2275+
mult_mat = np.broadcast_to(mult_data.reshape(-1, 1), df.shape)
2276+
mask = np.isnan(mult_mat)
22812277
else:
2278+
mult_mat = np.broadcast_to(mult_data.reshape(1, -1), df.shape)
22822279
mask = np.isnan(mult_mat)
22832280
mask = df.isna().values & mask
22842281

22852282
df_result = df.mul(mult_data, axis=axis, fill_value=fill_val)
2286-
if np_int_flag == 1:
2287-
mult_np = np.nan_to_num(mult_data, nan=fill_val)
2288-
df_expected = (df.fillna(fill_val).mul(mult_np, axis=axis)).mask(mask, np.nan)
2289-
else:
2290-
df_expected = (
2291-
df.fillna(fill_val).mul(mult_data.fillna(fill_val), axis=axis)
2292-
).mask(mask, np.nan)
2283+
df_expected = (df.fillna(fill_val).mul(mult_data.fillna(fill_val), axis=axis)).mask(
2284+
mask, np.nan
2285+
)
22932286

22942287
tm.assert_frame_equal(df_result, df_expected)

0 commit comments

Comments
 (0)