Skip to content

Commit 3193388

Browse files
jorisvandenbosschesimonjayhawkins
authored andcommitted
Backport PR pandas-dev#48176: REGR: ensure DataFrame.select_dtypes() returns a copy
1 parent 4c60b14 commit 3193388

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

doc/source/whatsnew/v1.4.4.rst

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Fixed regressions
2626
- Fixed regression in :meth:`DataFrame.loc` setting a length-1 array like value to a single value in the DataFrame (:issue:`46268`)
2727
- Fixed regression when slicing with :meth:`DataFrame.loc` with :class:`DateOffset`-index (:issue:`46671`)
2828
- Fixed regression in setting ``None`` or non-string value into a ``string``-dtype Series using a mask (:issue:`47628`)
29+
- Fixed regression in :meth:`DataFrame.select_dtypes` returning a view on the original DataFrame (:issue:`48090`)
2930
- Fixed regression using custom Index subclasses (for example, used in xarray) with :meth:`~DataFrame.reset_index` or :meth:`Index.insert` (:issue:`47071`)
3031
- Fixed regression in :meth:`DatetimeIndex.intersection` when the :class:`DatetimeIndex` has dates crossing daylight savings time (:issue:`46702`)
3132
- Fixed regression in :func:`merge` throwing an error when passing a :class:`Series` with a multi-level name (:issue:`47946`)

pandas/core/frame.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4378,7 +4378,7 @@ def predicate(arr: ArrayLike) -> bool:
43784378

43794379
return True
43804380

4381-
mgr = self._mgr._get_data_subset(predicate)
4381+
mgr = self._mgr._get_data_subset(predicate).copy(deep=None)
43824382
return type(self)(mgr).__finalize__(self)
43834383

43844384
def insert(

pandas/tests/frame/methods/test_select_dtypes.py

+9
Original file line numberDiff line numberDiff line change
@@ -456,3 +456,12 @@ def test_np_bool_ea_boolean_include_number(self):
456456
result = df.select_dtypes(include="number")
457457
expected = DataFrame({"a": [1, 2, 3]})
458458
tm.assert_frame_equal(result, expected)
459+
460+
def test_select_dtypes_no_view(self):
461+
# https://github.com/pandas-dev/pandas/issues/48090
462+
# result of this method is not a view on the original dataframe
463+
df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
464+
df_orig = df.copy()
465+
result = df.select_dtypes(include=["number"])
466+
result.iloc[0, 0] = 0
467+
tm.assert_frame_equal(df, df_orig)

0 commit comments

Comments
 (0)