Skip to content

Commit a8fa1de

Browse files
committed
API: Store name outside attrs
This aligns with xarray and h5py: pandas-dev#29062 (comment)
1 parent cea6853 commit a8fa1de

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

pandas/core/series.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ class Series(base.IndexOpsMixin, generic.NDFrame):
159159

160160
_typ = "series"
161161

162-
_metadata: List[str] = []
162+
_name: Hashable
163+
_metadata: List[str] = ["name"]
163164
_accessors = {"dt", "cat", "str", "sparse"}
164165
_deprecations = (
165166
base.IndexOpsMixin._deprecations
@@ -425,13 +426,13 @@ def dtypes(self):
425426

426427
@property
427428
def name(self) -> Optional[Hashable]:
428-
return self.attrs.get("name", None)
429+
return self._name
429430

430431
@name.setter
431432
def name(self, value: Optional[Hashable]) -> None:
432433
if not is_hashable(value):
433434
raise TypeError("Series.name must be a hashable type")
434-
self.attrs["name"] = value
435+
object.__setattr__(self, "_name", value)
435436

436437
@property
437438
def values(self):

pandas/tests/frame/test_api.py

+8
Original file line numberDiff line numberDiff line change
@@ -551,3 +551,11 @@ async def test_tab_complete_warning(self, ip):
551551
with tm.assert_produces_warning(None):
552552
with provisionalcompleter("ignore"):
553553
list(ip.Completer.completions("df.", 1))
554+
555+
def test_attrs(self):
556+
df = pd.DataFrame({"A": [2, 3]})
557+
assert df.attrs == {}
558+
df.attrs["version"] = 1
559+
560+
result = df.rename(columns=str)
561+
assert result.attrs == {"version": 1}

pandas/tests/series/test_api.py

+7
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,13 @@ def test_integer_series_size(self):
512512
s = Series(range(9), dtype="Int64")
513513
assert s.size == 9
514514

515+
def test_attrs(self):
516+
s = pd.Series([0, 1], name="abc")
517+
assert s.attrs == {}
518+
s.attrs["version"] = 1
519+
result = s + 1
520+
assert result.attrs == {"version": 1}
521+
515522

516523
class TestCategoricalSeries:
517524
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)