Skip to content

Commit e4c27dc

Browse files
committed
BUG: DataFrame._slice doesnt retain metadata
1 parent cb8c130 commit e4c27dc

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
@@ -69,7 +69,7 @@ Bug Fixes
6969
- Bug in ``transform`` causing length mismatch when null entries were present and a fast aggregator was being used (:issue:`9697`)
7070

7171

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

7474

7575

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
@@ -14057,6 +14057,28 @@ def test_assign_bad(self):
1405714057
with tm.assertRaises(KeyError):
1405814058
df.assign(C=df.A, D=lambda x: x['A'] + x['C'])
1405914059

14060+
def test_dataframe_metadata(self):
14061+
14062+
class TestDataFrame(DataFrame):
14063+
_metadata = ['testattr']
14064+
14065+
@property
14066+
def _constructor(self):
14067+
return TestDataFrame
14068+
14069+
14070+
df = TestDataFrame({'X': [1, 2, 3], 'Y': [1, 2, 3]},
14071+
index=['a', 'b', 'c'])
14072+
df.testattr = 'XXX'
14073+
14074+
self.assertEqual(df.testattr, 'XXX')
14075+
self.assertEqual(df[['X']].testattr, 'XXX')
14076+
self.assertEqual(df.loc[['a', 'b'], :].testattr, 'XXX')
14077+
self.assertEqual(df.iloc[[0, 1], :].testattr, 'XXX')
14078+
# GH9776
14079+
self.assertEqual(df.iloc[0:1, :].testattr, 'XXX')
14080+
14081+
1406014082
def skip_if_no_ne(engine='numexpr'):
1406114083
if engine == 'numexpr':
1406214084
try:

0 commit comments

Comments
 (0)