Skip to content

Commit 9a5a9d3

Browse files
committed
Merge pull request #9793 from sinhrks/slice_meta
BUG: DataFrame._slice doesnt retain metadata
2 parents 30dd866 + e4c27dc commit 9a5a9d3

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

doc/source/whatsnew/v0.16.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Bug Fixes
7272
- Bug in ``transform`` causing length mismatch when null entries were present and a fast aggregator was being used (:issue:`9697`)
7373

7474

75-
75+
- Bug in ``DataFrame`` slicing may not retain metadata (:issue:`9776`)
7676

7777

7878

pandas/core/generic.py

+1
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,7 @@ def _slice(self, slobj, axis=0, kind=None):
11791179
"""
11801180
axis = self._get_block_manager_axis(axis)
11811181
result = self._constructor(self._data.get_slice(slobj, axis=axis))
1182+
result = result.__finalize__(self)
11821183

11831184
# this could be a view
11841185
# but only in a single-dtyped view slicable case

pandas/tests/test_frame.py

+22
Original file line numberDiff line numberDiff line change
@@ -14078,6 +14078,28 @@ def test_assign_bad(self):
1407814078
with tm.assertRaises(KeyError):
1407914079
df.assign(C=df.A, D=lambda x: x['A'] + x['C'])
1408014080

14081+
def test_dataframe_metadata(self):
14082+
14083+
class TestDataFrame(DataFrame):
14084+
_metadata = ['testattr']
14085+
14086+
@property
14087+
def _constructor(self):
14088+
return TestDataFrame
14089+
14090+
14091+
df = TestDataFrame({'X': [1, 2, 3], 'Y': [1, 2, 3]},
14092+
index=['a', 'b', 'c'])
14093+
df.testattr = 'XXX'
14094+
14095+
self.assertEqual(df.testattr, 'XXX')
14096+
self.assertEqual(df[['X']].testattr, 'XXX')
14097+
self.assertEqual(df.loc[['a', 'b'], :].testattr, 'XXX')
14098+
self.assertEqual(df.iloc[[0, 1], :].testattr, 'XXX')
14099+
# GH9776
14100+
self.assertEqual(df.iloc[0:1, :].testattr, 'XXX')
14101+
14102+
1408114103
def skip_if_no_ne(engine='numexpr'):
1408214104
if engine == 'numexpr':
1408314105
try:

0 commit comments

Comments
 (0)