Skip to content

Commit 8f9ffcc

Browse files
DOC: enable docstring on DataFrame.columns/index (#20385)
1 parent 86684ad commit 8f9ffcc

File tree

8 files changed

+34
-18
lines changed

8 files changed

+34
-18
lines changed

doc/source/api.rst

+11-7
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,11 @@ Constructor
263263
Attributes
264264
~~~~~~~~~~
265265
**Axes**
266-
* **index**: axis labels
266+
267+
.. autosummary::
268+
:toctree: generated/
269+
270+
Series.index
267271

268272
.. autosummary::
269273
:toctree: generated/
@@ -845,13 +849,15 @@ Attributes and underlying data
845849
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
846850
**Axes**
847851

848-
* **index**: row labels
849-
* **columns**: column labels
852+
.. autosummary::
853+
:toctree: generated/
854+
855+
DataFrame.index
856+
DataFrame.columns
850857

851858
.. autosummary::
852859
:toctree: generated/
853860

854-
DataFrame.as_matrix
855861
DataFrame.dtypes
856862
DataFrame.ftypes
857863
DataFrame.get_dtype_counts
@@ -2546,8 +2552,7 @@ objects.
25462552
:hidden:
25472553

25482554
generated/pandas.DataFrame.blocks
2549-
generated/pandas.DataFrame.columns
2550-
generated/pandas.DataFrame.index
2555+
generated/pandas.DataFrame.as_matrix
25512556
generated/pandas.DataFrame.ix
25522557
generated/pandas.Index.asi8
25532558
generated/pandas.Index.data
@@ -2566,6 +2571,5 @@ objects.
25662571
generated/pandas.Series.asobject
25672572
generated/pandas.Series.blocks
25682573
generated/pandas.Series.from_array
2569-
generated/pandas.Series.index
25702574
generated/pandas.Series.ix
25712575
generated/pandas.Timestamp.offset

pandas/_libs/properties.pyx

+6-3
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,22 @@ cache_readonly = CachedProperty
4242

4343

4444
cdef class AxisProperty(object):
45-
cdef:
45+
46+
cdef readonly:
4647
Py_ssize_t axis
48+
object __doc__
4749

48-
def __init__(self, axis=0):
50+
def __init__(self, axis=0, doc=""):
4951
self.axis = axis
52+
self.__doc__ = doc
5053

5154
def __get__(self, obj, type):
5255
cdef:
5356
list axes
5457

5558
if obj is None:
5659
# Only instances have _data, not classes
57-
return None
60+
return self
5861
else:
5962
axes = obj._data.axes
6063
return axes[self.axis]

pandas/core/frame.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -6989,7 +6989,10 @@ def isin(self, values):
69896989

69906990

69916991
DataFrame._setup_axes(['index', 'columns'], info_axis=1, stat_axis=0,
6992-
axes_are_reversed=True, aliases={'rows': 0})
6992+
axes_are_reversed=True, aliases={'rows': 0},
6993+
docs={
6994+
'index': 'The index (row labels) of the DataFrame.',
6995+
'columns': 'The column labels of the DataFrame.'})
69936996
DataFrame._add_numeric_operations()
69946997
DataFrame._add_series_or_dataframe_operations()
69956998

pandas/core/generic.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def _constructor_expanddim(self):
236236
@classmethod
237237
def _setup_axes(cls, axes, info_axis=None, stat_axis=None, aliases=None,
238238
slicers=None, axes_are_reversed=False, build_axes=True,
239-
ns=None):
239+
ns=None, docs=None):
240240
"""Provide axes setup for the major PandasObjects.
241241
242242
Parameters
@@ -278,7 +278,7 @@ def _setup_axes(cls, axes, info_axis=None, stat_axis=None, aliases=None,
278278
if build_axes:
279279

280280
def set_axis(a, i):
281-
setattr(cls, a, properties.AxisProperty(i))
281+
setattr(cls, a, properties.AxisProperty(i, docs.get(a, a)))
282282
cls._internal_names_set.add(a)
283283

284284
if axes_are_reversed:

pandas/core/panel.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,8 @@ def _extract_axis(self, data, axis=0, intersect=False):
15231523
stat_axis=1, aliases={'major': 'major_axis',
15241524
'minor': 'minor_axis'},
15251525
slicers={'major_axis': 'index',
1526-
'minor_axis': 'columns'})
1526+
'minor_axis': 'columns'},
1527+
docs={})
15271528

15281529
ops.add_special_arithmetic_methods(Panel)
15291530
ops.add_flex_arithmetic_methods(Panel)

pandas/core/series.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3871,7 +3871,8 @@ def to_period(self, freq=None, copy=True):
38713871
hist = gfx.hist_series
38723872

38733873

3874-
Series._setup_axes(['index'], info_axis=0, stat_axis=0, aliases={'rows': 0})
3874+
Series._setup_axes(['index'], info_axis=0, stat_axis=0, aliases={'rows': 0},
3875+
docs={'index': 'The index (axis labels) of the Series.'})
38753876
Series._add_numeric_operations()
38763877
Series._add_series_only_operations()
38773878
Series._add_series_or_dataframe_operations()

pandas/tests/frame/test_api.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
# pylint: disable-msg=W0612,E1101
88
from copy import deepcopy
9+
import pydoc
910
import sys
1011
from distutils.version import LooseVersion
1112

@@ -362,8 +363,9 @@ def test_axis_aliases(self):
362363

363364
def test_class_axis(self):
364365
# https://github.com/pandas-dev/pandas/issues/18147
365-
DataFrame.index # no exception!
366-
DataFrame.columns # no exception!
366+
# no exception and no empty docstring
367+
assert pydoc.getdoc(DataFrame.index)
368+
assert pydoc.getdoc(DataFrame.columns)
367369

368370
def test_more_values(self):
369371
values = self.mixed_frame.values

pandas/tests/series/test_api.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# coding=utf-8
22
# pylint: disable-msg=E1101,W0612
33
from collections import OrderedDict
4+
import pydoc
45

56
import pytest
67

@@ -384,7 +385,8 @@ def test_axis_alias(self):
384385

385386
def test_class_axis(self):
386387
# https://github.com/pandas-dev/pandas/issues/18147
387-
Series.index # no exception!
388+
# no exception and no empty docstring
389+
assert pydoc.getdoc(Series.index)
388390

389391
def test_numpy_unique(self):
390392
# it works!

0 commit comments

Comments
 (0)