Skip to content

Commit 7a56966

Browse files
authored
DOC: Fix errors detected by sphinx-lint (pandas-dev#46586)
* Avoid mixing tabs and space. * fix rst issues found by sphinx-lint. * Make flake8-rst happy. * FIX: two hyperlinks in rst. * Marc' suggestion * Use sphinx-lint tag in pre-commit hook.
1 parent e1b95fa commit 7a56966

23 files changed

+107
-103
lines changed

.pre-commit-config.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ repos:
7070
- id: rst-inline-touching-normal
7171
types: [text] # overwrite types: [rst]
7272
types_or: [python, rst]
73+
- repo: https://github.com/sphinx-contrib/sphinx-lint
74+
rev: v0.2
75+
hooks:
76+
- id: sphinx-lint
7377
- repo: https://github.com/asottile/yesqa
7478
rev: v1.3.0
7579
hooks:

doc/source/development/contributing_codebase.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ In some cases you may be tempted to use ``cast`` from the typing module when you
223223
...
224224
else: # Reasonably only str objects would reach this but...
225225
obj = cast(str, obj) # Mypy complains without this!
226-
return obj.upper()
226+
return obj.upper()
227227
228228
The limitation here is that while a human can reasonably understand that ``is_number`` would catch the ``int`` and ``float`` types mypy cannot make that same inference just yet (see `mypy #5206 <https://github.com/python/mypy/issues/5206>`_. While the above works, the use of ``cast`` is **strongly discouraged**. Where applicable a refactor of the code to appease static analysis is preferable
229229

doc/source/development/contributing_environment.rst

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ You will need `Build Tools for Visual Studio 2019
8585
<https://visualstudio.microsoft.com/downloads/>`_.
8686

8787
.. warning::
88-
You DO NOT need to install Visual Studio 2019.
89-
You only need "Build Tools for Visual Studio 2019" found by
90-
scrolling down to "All downloads" -> "Tools for Visual Studio 2019".
91-
In the installer, select the "C++ build tools" workload.
88+
You DO NOT need to install Visual Studio 2019.
89+
You only need "Build Tools for Visual Studio 2019" found by
90+
scrolling down to "All downloads" -> "Tools for Visual Studio 2019".
91+
In the installer, select the "C++ build tools" workload.
9292

9393
You can install the necessary components on the commandline using
9494
`vs_buildtools.exe <https://download.visualstudio.microsoft.com/download/pr/9a26f37e-6001-429b-a5db-c5455b93953c/460d80ab276046de2455a4115cc4e2f1e6529c9e6cb99501844ecafd16c619c4/vs_BuildTools.exe>`_:

doc/source/ecosystem.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -540,15 +540,15 @@ Pandas-Genomics provides extension types, extension arrays, and extension access
540540
`Pint-Pandas`_
541541
~~~~~~~~~~~~~~
542542

543-
``Pint-Pandas <https://github.com/hgrecco/pint-pandas>`` provides an extension type for
543+
`Pint-Pandas <https://github.com/hgrecco/pint-pandas>`_ provides an extension type for
544544
storing numeric arrays with units. These arrays can be stored inside pandas'
545545
Series and DataFrame. Operations between Series and DataFrame columns which
546546
use pint's extension array are then units aware.
547547

548548
`Text Extensions for Pandas`_
549549
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
550550

551-
``Text Extensions for Pandas <https://ibm.biz/text-extensions-for-pandas>``
551+
`Text Extensions for Pandas <https://ibm.biz/text-extensions-for-pandas>`_
552552
provides extension types to cover common data structures for representing natural language
553553
data, plus library integrations that convert the outputs of popular natural language
554554
processing libraries into Pandas DataFrames.

doc/source/user_guide/dsintro.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,7 @@ Boolean operators operate element-wise as well:
678678
Transposing
679679
~~~~~~~~~~~
680680

681-
To transpose, access the ``T`` attribute or :meth:`DataFrame.transpose``,
681+
To transpose, access the ``T`` attribute or :meth:`DataFrame.transpose`,
682682
similar to an ndarray:
683683

684684
.. ipython:: python

doc/source/user_guide/groupby.rst

+13-13
Original file line numberDiff line numberDiff line change
@@ -539,19 +539,19 @@ Some common aggregating functions are tabulated below:
539539
:widths: 20, 80
540540
:delim: ;
541541

542-
:meth:`~pd.core.groupby.DataFrameGroupBy.mean`;Compute mean of groups
543-
:meth:`~pd.core.groupby.DataFrameGroupBy.sum`;Compute sum of group values
544-
:meth:`~pd.core.groupby.DataFrameGroupBy.size`;Compute group sizes
545-
:meth:`~pd.core.groupby.DataFrameGroupBy.count`;Compute count of group
546-
:meth:`~pd.core.groupby.DataFrameGroupBy.std`;Standard deviation of groups
547-
:meth:`~pd.core.groupby.DataFrameGroupBy.var`;Compute variance of groups
548-
:meth:`~pd.core.groupby.DataFrameGroupBy.sem`;Standard error of the mean of groups
549-
:meth:`~pd.core.groupby.DataFrameGroupBy.describe`;Generates descriptive statistics
550-
:meth:`~pd.core.groupby.DataFrameGroupBy.first`;Compute first of group values
551-
:meth:`~pd.core.groupby.DataFrameGroupBy.last`;Compute last of group values
552-
:meth:`~pd.core.groupby.DataFrameGroupBy.nth`;Take nth value, or a subset if n is a list
553-
:meth:`~pd.core.groupby.DataFrameGroupBy.min`;Compute min of group values
554-
:meth:`~pd.core.groupby.DataFrameGroupBy.max`;Compute max of group values
542+
:meth:`~pd.core.groupby.DataFrameGroupBy.mean`;Compute mean of groups
543+
:meth:`~pd.core.groupby.DataFrameGroupBy.sum`;Compute sum of group values
544+
:meth:`~pd.core.groupby.DataFrameGroupBy.size`;Compute group sizes
545+
:meth:`~pd.core.groupby.DataFrameGroupBy.count`;Compute count of group
546+
:meth:`~pd.core.groupby.DataFrameGroupBy.std`;Standard deviation of groups
547+
:meth:`~pd.core.groupby.DataFrameGroupBy.var`;Compute variance of groups
548+
:meth:`~pd.core.groupby.DataFrameGroupBy.sem`;Standard error of the mean of groups
549+
:meth:`~pd.core.groupby.DataFrameGroupBy.describe`;Generates descriptive statistics
550+
:meth:`~pd.core.groupby.DataFrameGroupBy.first`;Compute first of group values
551+
:meth:`~pd.core.groupby.DataFrameGroupBy.last`;Compute last of group values
552+
:meth:`~pd.core.groupby.DataFrameGroupBy.nth`;Take nth value, or a subset if n is a list
553+
:meth:`~pd.core.groupby.DataFrameGroupBy.min`;Compute min of group values
554+
:meth:`~pd.core.groupby.DataFrameGroupBy.max`;Compute max of group values
555555

556556

557557
The aggregating functions above will exclude NA values. Any function which

doc/source/user_guide/io.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -5695,9 +5695,9 @@ for an explanation of how the database connection is handled.
56955695
56965696
.. warning::
56975697

5698-
When you open a connection to a database you are also responsible for closing it.
5699-
Side effects of leaving a connection open may include locking the database or
5700-
other breaking behaviour.
5698+
When you open a connection to a database you are also responsible for closing it.
5699+
Side effects of leaving a connection open may include locking the database or
5700+
other breaking behaviour.
57015701

57025702
Writing DataFrames
57035703
''''''''''''''''''

doc/source/user_guide/timeseries.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -2405,9 +2405,9 @@ you can use the ``tz_convert`` method.
24052405
24062406
.. warning::
24072407

2408-
Be wary of conversions between libraries. For some time zones, ``pytz`` and ``dateutil`` have different
2409-
definitions of the zone. This is more of a problem for unusual time zones than for
2410-
'standard' zones like ``US/Eastern``.
2408+
Be wary of conversions between libraries. For some time zones, ``pytz`` and ``dateutil`` have different
2409+
definitions of the zone. This is more of a problem for unusual time zones than for
2410+
'standard' zones like ``US/Eastern``.
24112411

24122412
.. warning::
24132413

doc/source/user_guide/window.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -624,13 +624,13 @@ average of ``3, NaN, 5`` would be calculated as
624624

625625
.. math::
626626
627-
\frac{(1-\alpha)^2 \cdot 3 + 1 \cdot 5}{(1-\alpha)^2 + 1}.
627+
\frac{(1-\alpha)^2 \cdot 3 + 1 \cdot 5}{(1-\alpha)^2 + 1}.
628628
629629
Whereas if ``ignore_na=True``, the weighted average would be calculated as
630630

631631
.. math::
632632
633-
\frac{(1-\alpha) \cdot 3 + 1 \cdot 5}{(1-\alpha) + 1}.
633+
\frac{(1-\alpha) \cdot 3 + 1 \cdot 5}{(1-\alpha) + 1}.
634634
635635
The :meth:`~Ewm.var`, :meth:`~Ewm.std`, and :meth:`~Ewm.cov` functions have a ``bias`` argument,
636636
specifying whether the result should contain biased or unbiased statistics.

doc/source/whatsnew/v0.15.0.rst

+24-24
Original file line numberDiff line numberDiff line change
@@ -462,15 +462,15 @@ Rolling/expanding moments improvements
462462
463463
.. code-block:: ipython
464464
465-
In [51]: ewma(s, com=3., min_periods=2)
466-
Out[51]:
467-
0 NaN
468-
1 NaN
469-
2 1.000000
470-
3 1.000000
471-
4 1.571429
472-
5 2.189189
473-
dtype: float64
465+
In [51]: pd.ewma(s, com=3., min_periods=2)
466+
Out[51]:
467+
0 NaN
468+
1 NaN
469+
2 1.000000
470+
3 1.000000
471+
4 1.571429
472+
5 2.189189
473+
dtype: float64
474474
475475
New behavior (note values start at index ``4``, the location of the 2nd (since ``min_periods=2``) non-empty value):
476476

@@ -557,21 +557,21 @@ Rolling/expanding moments improvements
557557
558558
.. code-block:: ipython
559559
560-
In [89]: ewmvar(s, com=2., bias=False)
561-
Out[89]:
562-
0 -2.775558e-16
563-
1 3.000000e-01
564-
2 9.556787e-01
565-
3 3.585799e+00
566-
dtype: float64
567-
568-
In [90]: ewmvar(s, com=2., bias=False) / ewmvar(s, com=2., bias=True)
569-
Out[90]:
570-
0 1.25
571-
1 1.25
572-
2 1.25
573-
3 1.25
574-
dtype: float64
560+
In [89]: pd.ewmvar(s, com=2., bias=False)
561+
Out[89]:
562+
0 -2.775558e-16
563+
1 3.000000e-01
564+
2 9.556787e-01
565+
3 3.585799e+00
566+
dtype: float64
567+
568+
In [90]: pd.ewmvar(s, com=2., bias=False) / pd.ewmvar(s, com=2., bias=True)
569+
Out[90]:
570+
0 1.25
571+
1 1.25
572+
2 1.25
573+
3 1.25
574+
dtype: float64
575575
576576
Note that entry ``0`` is approximately 0, and the debiasing factors are a constant 1.25.
577577
By comparison, the following 0.15.0 results have a ``NaN`` for entry ``0``,

doc/source/whatsnew/v0.18.1.rst

+2-2
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ can return a valid boolean indexer or anything which is valid for these indexer'
149149
# callable returns list of labels
150150
df.loc[lambda x: [1, 2], lambda x: ["A", "B"]]
151151
152-
Indexing with``[]``
153-
"""""""""""""""""""
152+
Indexing with ``[]``
153+
""""""""""""""""""""
154154

155155
Finally, you can use a callable in ``[]`` indexing of Series, DataFrame and Panel.
156156
The callable must return a valid input for ``[]`` indexing depending on its

doc/source/whatsnew/v0.19.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ Bug fixes
15531553
- Bug in invalid datetime parsing in ``to_datetime`` and ``DatetimeIndex`` may raise ``TypeError`` rather than ``ValueError`` (:issue:`11169`, :issue:`11287`)
15541554
- Bug in ``Index`` created with tz-aware ``Timestamp`` and mismatched ``tz`` option incorrectly coerces timezone (:issue:`13692`)
15551555
- Bug in ``DatetimeIndex`` with nanosecond frequency does not include timestamp specified with ``end`` (:issue:`13672`)
1556-
- Bug in ```Series`` when setting a slice with a ``np.timedelta64`` (:issue:`14155`)
1556+
- Bug in ``Series`` when setting a slice with a ``np.timedelta64`` (:issue:`14155`)
15571557
- Bug in ``Index`` raises ``OutOfBoundsDatetime`` if ``datetime`` exceeds ``datetime64[ns]`` bounds, rather than coercing to ``object`` dtype (:issue:`13663`)
15581558
- Bug in ``Index`` may ignore specified ``datetime64`` or ``timedelta64`` passed as ``dtype`` (:issue:`13981`)
15591559
- Bug in ``RangeIndex`` can be created without no arguments rather than raises ``TypeError`` (:issue:`13793`)

doc/source/whatsnew/v0.21.1.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ Indexing
125125
IO
126126
^^
127127

128-
- Bug in class:`~pandas.io.stata.StataReader` not converting date/time columns with display formatting addressed (:issue:`17990`). Previously columns with display formatting were normally left as ordinal numbers and not converted to datetime objects.
128+
- Bug in :class:`~pandas.io.stata.StataReader` not converting date/time columns with display formatting addressed (:issue:`17990`). Previously columns with display formatting were normally left as ordinal numbers and not converted to datetime objects.
129129
- Bug in :func:`read_csv` when reading a compressed UTF-16 encoded file (:issue:`18071`)
130130
- Bug in :func:`read_csv` for handling null values in index columns when specifying ``na_filter=False`` (:issue:`5239`)
131131
- Bug in :func:`read_csv` when reading numeric category fields with high cardinality (:issue:`18186`)

doc/source/whatsnew/v0.23.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1126,7 +1126,7 @@ Removal of prior version deprecations/changes
11261126
- The ``Panel`` class has dropped the ``to_long`` and ``toLong`` methods (:issue:`19077`)
11271127
- The options ``display.line_with`` and ``display.height`` are removed in favor of ``display.width`` and ``display.max_rows`` respectively (:issue:`4391`, :issue:`19107`)
11281128
- The ``labels`` attribute of the ``Categorical`` class has been removed in favor of :attr:`Categorical.codes` (:issue:`7768`)
1129-
- The ``flavor`` parameter have been removed from func:`to_sql` method (:issue:`13611`)
1129+
- The ``flavor`` parameter have been removed from :func:`to_sql` method (:issue:`13611`)
11301130
- The modules ``pandas.tools.hashing`` and ``pandas.util.hashing`` have been removed (:issue:`16223`)
11311131
- The top-level functions ``pd.rolling_*``, ``pd.expanding_*`` and ``pd.ewm*`` have been removed (Deprecated since v0.18).
11321132
Instead, use the DataFrame/Series methods :attr:`~DataFrame.rolling`, :attr:`~DataFrame.expanding` and :attr:`~DataFrame.ewm` (:issue:`18723`)

doc/source/whatsnew/v0.25.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -1121,7 +1121,7 @@ Indexing
11211121
- Bug in which :meth:`DataFrame.to_csv` caused a segfault for a reindexed data frame, when the indices were single-level :class:`MultiIndex` (:issue:`26303`).
11221122
- Fixed bug where assigning a :class:`arrays.PandasArray` to a :class:`pandas.core.frame.DataFrame` would raise error (:issue:`26390`)
11231123
- Allow keyword arguments for callable local reference used in the :meth:`DataFrame.query` string (:issue:`26426`)
1124-
- Fixed a ``KeyError`` when indexing a :class:`MultiIndex`` level with a list containing exactly one label, which is missing (:issue:`27148`)
1124+
- Fixed a ``KeyError`` when indexing a :class:`MultiIndex` level with a list containing exactly one label, which is missing (:issue:`27148`)
11251125
- Bug which produced ``AttributeError`` on partial matching :class:`Timestamp` in a :class:`MultiIndex` (:issue:`26944`)
11261126
- Bug in :class:`Categorical` and :class:`CategoricalIndex` with :class:`Interval` values when using the ``in`` operator (``__contains``) with objects that are not comparable to the values in the ``Interval`` (:issue:`23705`)
11271127
- Bug in :meth:`DataFrame.loc` and :meth:`DataFrame.iloc` on a :class:`DataFrame` with a single timezone-aware datetime64[ns] column incorrectly returning a scalar instead of a :class:`Series` (:issue:`27110`)

doc/source/whatsnew/v0.7.0.rst

+5-5
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,11 @@ been added:
190190
:header: "Method","Description"
191191
:widths: 40,60
192192

193-
``Series.iget_value(i)``, Retrieve value stored at location ``i``
194-
``Series.iget(i)``, Alias for ``iget_value``
195-
``DataFrame.irow(i)``, Retrieve the ``i``-th row
196-
``DataFrame.icol(j)``, Retrieve the ``j``-th column
197-
"``DataFrame.iget_value(i, j)``", Retrieve the value at row ``i`` and column ``j``
193+
``Series.iget_value(i)``, Retrieve value stored at location ``i``
194+
``Series.iget(i)``, Alias for ``iget_value``
195+
``DataFrame.irow(i)``, Retrieve the ``i``-th row
196+
``DataFrame.icol(j)``, Retrieve the ``j``-th column
197+
"``DataFrame.iget_value(i, j)``", Retrieve the value at row ``i`` and column ``j``
198198

199199
API tweaks regarding label-based slicing
200200
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

doc/source/whatsnew/v0.9.1.rst

+22-22
Original file line numberDiff line numberDiff line change
@@ -54,44 +54,44 @@ New features
5454
- DataFrame has new ``where`` and ``mask`` methods to select values according to a
5555
given boolean mask (:issue:`2109`, :issue:`2151`)
5656

57-
DataFrame currently supports slicing via a boolean vector the same length as the DataFrame (inside the ``[]``).
58-
The returned DataFrame has the same number of columns as the original, but is sliced on its index.
57+
DataFrame currently supports slicing via a boolean vector the same length as the DataFrame (inside the ``[]``).
58+
The returned DataFrame has the same number of columns as the original, but is sliced on its index.
5959

6060
.. ipython:: python
6161
62-
df = DataFrame(np.random.randn(5, 3), columns = ['A','B','C'])
62+
df = pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C'])
6363
64-
df
64+
df
6565
66-
df[df['A'] > 0]
66+
df[df['A'] > 0]
6767
68-
If a DataFrame is sliced with a DataFrame based boolean condition (with the same size as the original DataFrame),
69-
then a DataFrame the same size (index and columns) as the original is returned, with
70-
elements that do not meet the boolean condition as ``NaN``. This is accomplished via
71-
the new method ``DataFrame.where``. In addition, ``where`` takes an optional ``other`` argument for replacement.
68+
If a DataFrame is sliced with a DataFrame based boolean condition (with the same size as the original DataFrame),
69+
then a DataFrame the same size (index and columns) as the original is returned, with
70+
elements that do not meet the boolean condition as ``NaN``. This is accomplished via
71+
the new method ``DataFrame.where``. In addition, ``where`` takes an optional ``other`` argument for replacement.
7272

73-
.. ipython:: python
73+
.. ipython:: python
7474
75-
df[df>0]
75+
df[df > 0]
7676
77-
df.where(df>0)
77+
df.where(df > 0)
7878
79-
df.where(df>0,-df)
79+
df.where(df > 0, -df)
8080
81-
Furthermore, ``where`` now aligns the input boolean condition (ndarray or DataFrame), such that partial selection
82-
with setting is possible. This is analogous to partial setting via ``.ix`` (but on the contents rather than the axis labels)
81+
Furthermore, ``where`` now aligns the input boolean condition (ndarray or DataFrame), such that partial selection
82+
with setting is possible. This is analogous to partial setting via ``.ix`` (but on the contents rather than the axis labels)
8383

84-
.. ipython:: python
84+
.. ipython:: python
8585
86-
df2 = df.copy()
87-
df2[ df2[1:4] > 0 ] = 3
88-
df2
86+
df2 = df.copy()
87+
df2[df2[1:4] > 0] = 3
88+
df2
8989
90-
``DataFrame.mask`` is the inverse boolean operation of ``where``.
90+
``DataFrame.mask`` is the inverse boolean operation of ``where``.
9191

92-
.. ipython:: python
92+
.. ipython:: python
9393
94-
df.mask(df<=0)
94+
df.mask(df <= 0)
9595
9696
- Enable referencing of Excel columns by their column names (:issue:`1936`)
9797

doc/source/whatsnew/v1.0.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ Use :meth:`arrays.IntegerArray.to_numpy` with an explicit ``na_value`` instead.
525525
526526
a.to_numpy(dtype="float", na_value=np.nan)
527527
528-
**Reductions can return ``pd.NA``**
528+
**Reductions can return** ``pd.NA``
529529

530530
When performing a reduction such as a sum with ``skipna=False``, the result
531531
will now be ``pd.NA`` instead of ``np.nan`` in presence of missing values

doc/source/whatsnew/v1.1.0.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -665,9 +665,9 @@ the previous index (:issue:`32240`).
665665
In [4]: result
666666
Out[4]:
667667
min_val
668-
0 x
669-
1 y
670-
2 z
668+
0 x
669+
1 y
670+
2 z
671671
672672
*New behavior*:
673673

doc/source/whatsnew/v1.4.0.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,7 @@ Datetimelike
826826
- Bug in :meth:`Timestamp.to_pydatetime` failing to retain the ``fold`` attribute (:issue:`45087`)
827827
- Bug in :meth:`Series.mode` with ``DatetimeTZDtype`` incorrectly returning timezone-naive and ``PeriodDtype`` incorrectly raising (:issue:`41927`)
828828
- Fixed regression in :meth:`~Series.reindex` raising an error when using an incompatible fill value with a datetime-like dtype (or not raising a deprecation warning for using a ``datetime.date`` as fill value) (:issue:`42921`)
829-
- Bug in :class:`DateOffset`` addition with :class:`Timestamp` where ``offset.nanoseconds`` would not be included in the result (:issue:`43968`, :issue:`36589`)
829+
- Bug in :class:`DateOffset` addition with :class:`Timestamp` where ``offset.nanoseconds`` would not be included in the result (:issue:`43968`, :issue:`36589`)
830830
- Bug in :meth:`Timestamp.fromtimestamp` not supporting the ``tz`` argument (:issue:`45083`)
831831
- Bug in :class:`DataFrame` construction from dict of :class:`Series` with mismatched index dtypes sometimes raising depending on the ordering of the passed dict (:issue:`44091`)
832832
- Bug in :class:`Timestamp` hashing during some DST transitions caused a segmentation fault (:issue:`33931` and :issue:`40817`)

pandas/core/groupby/generic.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1658,13 +1658,13 @@ def value_counts(
16581658
... })
16591659
16601660
>>> df
1661-
gender education country
1662-
0 male low US
1663-
1 male medium FR
1664-
2 female high US
1665-
3 male low FR
1666-
4 female high FR
1667-
5 male low FR
1661+
gender education country
1662+
0 male low US
1663+
1 male medium FR
1664+
2 female high US
1665+
3 male low FR
1666+
4 female high FR
1667+
5 male low FR
16681668
16691669
>>> df.groupby('gender').value_counts()
16701670
gender education country

0 commit comments

Comments
 (0)