Fix: Use only one blank line to separate sections or paragraphs
State: closed

By running `./scripts/validate_docstrings.py --errors=GL03 --format=azure`, I was able to get the list of GL03 errors with files and line numbers where these errors occurred.

I fixed a big portion of these issues so far.

@datapythonista 

- [ ] closes #23870 
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`



Labels:
name: Docs

Comments:
Hello @alexander-ponomaroff! Thanks for submitting the PR.

 - There are no PEP8 issues in the file [`pandas/core/algorithms.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/algorithms.py) !

 - There are no PEP8 issues in the file [`pandas/core/config.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/config.py) !

 - There are no PEP8 issues in the file [`pandas/core/dtypes/common.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/dtypes/common.py) !

 - There are no PEP8 issues in the file [`pandas/core/frame.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/frame.py) !

 - There are no PEP8 issues in the file [`pandas/core/groupby/generic.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/groupby/generic.py) !

 - There are no PEP8 issues in the file [`pandas/core/groupby/groupby.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/groupby/groupby.py) !

 - There are no PEP8 issues in the file [`pandas/core/indexes/base.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/indexes/base.py) !

 - There are no PEP8 issues in the file [`pandas/core/indexes/category.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/indexes/category.py) !

 - There are no PEP8 issues in the file [`pandas/core/indexes/datetimes.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/indexes/datetimes.py) !

 - There are no PEP8 issues in the file [`pandas/core/indexes/multi.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/indexes/multi.py) !

 - There are no PEP8 issues in the file [`pandas/core/panel.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/panel.py) !

 - There are no PEP8 issues in the file [`pandas/core/resample.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/resample.py) !

 - There are no PEP8 issues in the file [`pandas/core/reshape/merge.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/reshape/merge.py) !

 - There are no PEP8 issues in the file [`pandas/core/reshape/pivot.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/reshape/pivot.py) !

 - There are no PEP8 issues in the file [`pandas/core/util/hashing.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/util/hashing.py) !

 - There are no PEP8 issues in the file [`pandas/core/window.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/core/window.py) !

 - There are no PEP8 issues in the file [`pandas/errors/__init__.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/errors/__init__.py) !

 - There are no PEP8 issues in the file [`pandas/io/formats/style.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/formats/style.py) !

 - There are no PEP8 issues in the file [`pandas/io/json/normalize.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/json/normalize.py) !

 - There are no PEP8 issues in the file [`pandas/io/packers.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/packers.py) !

 - There are no PEP8 issues in the file [`pandas/io/parquet.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/parquet.py) !

 - There are no PEP8 issues in the file [`pandas/io/pytables.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/pytables.py) !

 - There are no PEP8 issues in the file [`pandas/io/sql.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/io/sql.py) !

 - There are no PEP8 issues in the file [`pandas/plotting/_core.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/plotting/_core.py) !

 - There are no PEP8 issues in the file [`pandas/tseries/offsets.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/tseries/offsets.py) !

 - There are no PEP8 issues in the file [`pandas/util/_decorators.py`](https://github.com/alexander-ponomaroff/pandas/blob/050fb2f38b58dca2c9d7baa02af6fc48c4b4d255/pandas/util/_decorators.py) !


### Original List of Errors - 127 errors

pandas.read_table
pandas.read_csv
pandas.read_fwf
pandas.read_msgpack
pandas.io.json.json_normalize
pandas.HDFStore.select
pandas.HDFStore.walk
pandas.read_feather
pandas.read_parquet
pandas.read_sql_table
pandas.read_sql_query
pandas.read_sql
pandas.melt
pandas.crosstab
pandas.merge_ordered
pandas.merge_asof
pandas.unique
pandas.util.hash_array
pandas.util.hash_pandas_object
pandas.Series.argmin
pandas.Series.argmax
pandas.DataFrame.iterrows
pandas.DataFrame.lookup
pandas.DataFrame.add
pandas.DataFrame.sub
pandas.DataFrame.mod
pandas.DataFrame.radd
pandas.DataFrame.rsub
pandas.DataFrame.rmod
pandas.DataFrame.count
pandas.DataFrame.swaplevel
pandas.DataFrame.melt
pandas.DataFrame.plot.pie
pandas.DataFrame.from_csv
pandas.DataFrame.to_feather
pandas.Panel.xs
pandas.Panel.major_xs
pandas.Panel.minor_xs
pandas.Panel.swaplevel
pandas.Index.reindex
pandas.Index.astype
pandas.Index.intersection
pandas.Index.union
pandas.Index.difference
pandas.Index.asof_locs
pandas.Index.get_indexer
pandas.Index.get_slice_bound
pandas.CategoricalIndex
pandas.IntervalIndex.from_arrays
pandas.IntervalIndex.from_tuples
pandas.IntervalIndex.get_indexer
pandas.MultiIndex.set_levels
pandas.MultiIndex.sortlevel
pandas.MultiIndex.remove_unused_levels
pandas.MultiIndex.get_indexer
pandas.DatetimeIndex
pandas.DatetimeIndex.snap
pandas.Timedelta
pandas.Timedelta.max
pandas.Timedelta.min
pandas.tseries.offsets.BusinessHour
pandas.tseries.offsets.CustomBusinessHour
pandas.tseries.offsets.LastWeekOfMonth
pandas.core.window.Rolling.max
pandas.core.window.Rolling.aggregate
pandas.core.window.Expanding.max
pandas.core.window.Expanding.aggregate
pandas.core.window.EWM.std
pandas.core.window.EWM.var
pandas.core.window.EWM.corr
pandas.core.window.EWM.cov
pandas.core.groupby.GroupBy.apply
pandas.core.groupby.GroupBy.all
pandas.core.groupby.GroupBy.any
pandas.core.groupby.GroupBy.head
pandas.core.groupby.GroupBy.mean
pandas.core.groupby.GroupBy.median
pandas.core.groupby.GroupBy.nth
pandas.core.groupby.GroupBy.ohlc
pandas.core.groupby.GroupBy.rank
pandas.core.groupby.GroupBy.sem
pandas.core.groupby.GroupBy.std
pandas.core.groupby.GroupBy.var
pandas.core.groupby.GroupBy.tail
pandas.core.groupby.DataFrameGroupBy.agg
pandas.core.groupby.DataFrameGroupBy.all
pandas.core.groupby.DataFrameGroupBy.any
pandas.core.groupby.DataFrameGroupBy.corr
pandas.core.groupby.DataFrameGroupBy.cov
pandas.core.groupby.DataFrameGroupBy.diff
pandas.core.groupby.DataFrameGroupBy.fillna
pandas.core.groupby.DataFrameGroupBy.hist
pandas.core.groupby.DataFrameGroupBy.idxmax
pandas.core.groupby.DataFrameGroupBy.idxmin
pandas.core.groupby.DataFrameGroupBy.mad
pandas.core.groupby.DataFrameGroupBy.quantile
pandas.core.groupby.DataFrameGroupBy.rank
pandas.core.groupby.DataFrameGroupBy.shift
pandas.core.groupby.DataFrameGroupBy.skew
pandas.core.groupby.DataFrameGroupBy.take
pandas.core.groupby.DataFrameGroupBy.tshift
pandas.core.groupby.SeriesGroupBy.nlargest
pandas.core.groupby.SeriesGroupBy.nsmallest
pandas.core.groupby.SeriesGroupBy.unique
pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing
pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing
pandas.core.groupby.DataFrameGroupBy.corrwith
pandas.core.resample.Resampler.__iter__
pandas.core.resample.Resampler.apply
pandas.core.resample.Resampler.aggregate
pandas.core.resample.Resampler.mean
pandas.core.resample.Resampler.median
pandas.core.resample.Resampler.ohlc
pandas.core.resample.Resampler.sem
pandas.io.formats.style.Styler.applymap
pandas.io.formats.style.Styler.where
pandas.io.formats.style.Styler.bar
pandas.plotting.andrews_curves
pandas.describe_option
pandas.reset_option
pandas.get_option
pandas.set_option
pandas.option_context
pandas.errors.UnsortedIndexError
pandas.api.types.pandas_dtype
pandas.api.types.is_scalar
pandas.DataFrame.subtract

### Current List of Errors - 58 errors

pandas.read_table
pandas.read_csv
pandas.read_fwf
pandas.read_feather
pandas.melt
pandas.Series.argmin
pandas.Series.argmax
pandas.DataFrame.add
pandas.DataFrame.sub
pandas.DataFrame.mod
pandas.DataFrame.radd
pandas.DataFrame.rsub
pandas.DataFrame.rmod
pandas.DataFrame.melt
pandas.Panel.swaplevel
pandas.Index.reindex
pandas.IntervalIndex.from_arrays
pandas.IntervalIndex.from_tuples
pandas.Timedelta
pandas.Timedelta.max
pandas.Timedelta.min
pandas.core.window.Rolling.max
pandas.core.window.Rolling.aggregate
pandas.core.window.Expanding.max
pandas.core.window.Expanding.aggregate
pandas.core.window.EWM.std
pandas.core.window.EWM.var
pandas.core.window.EWM.corr
pandas.core.window.EWM.cov
pandas.core.groupby.GroupBy.apply
pandas.core.groupby.DataFrameGroupBy.agg
pandas.core.groupby.DataFrameGroupBy.corr
pandas.core.groupby.DataFrameGroupBy.cov
pandas.core.groupby.DataFrameGroupBy.diff
pandas.core.groupby.DataFrameGroupBy.fillna
pandas.core.groupby.DataFrameGroupBy.hist
pandas.core.groupby.DataFrameGroupBy.idxmax
pandas.core.groupby.DataFrameGroupBy.idxmin
pandas.core.groupby.DataFrameGroupBy.mad
pandas.core.groupby.DataFrameGroupBy.quantile
pandas.core.groupby.DataFrameGroupBy.skew
pandas.core.groupby.DataFrameGroupBy.take
pandas.core.groupby.DataFrameGroupBy.tshift
pandas.core.groupby.SeriesGroupBy.nlargest
pandas.core.groupby.SeriesGroupBy.nsmallest
pandas.core.groupby.SeriesGroupBy.unique
pandas.core.groupby.SeriesGroupBy.is_monotonic_increasing
pandas.core.groupby.SeriesGroupBy.is_monotonic_decreasing
pandas.core.groupby.DataFrameGroupBy.corrwith
pandas.core.resample.Resampler.apply
pandas.core.resample.Resampler.aggregate
pandas.plotting.andrews_curves
pandas.describe_option
pandas.reset_option
pandas.get_option
pandas.set_option
pandas.api.types.is_scalar
pandas.DataFrame.subtract


# [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=h1) Report
> Merging [#23871](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=desc) into [master](https://codecov.io/gh/pandas-dev/pandas/commit/e5c90e5e355077c4ee5245a4a72833f4e8af72b9?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/pandas-dev/pandas/pull/23871/graphs/tree.svg?width=650&token=eZ4WkYLtcO&height=150&src=pr)](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master   #23871   +/-   ##
=======================================
  Coverage   92.29%   92.29%           
=======================================
  Files         161      161           
  Lines       51497    51497           
=======================================
  Hits        47530    47530           
  Misses       3967     3967
```

| Flag | Coverage Δ | |
|---|---|---|
| #multiple | `90.69% <ø> (ø)` | :arrow_up: |
| #single | `42.42% <ø> (ø)` | :arrow_up: |

| [Impacted Files](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pandas/core/reshape/pivot.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvcmVzaGFwZS9waXZvdC5weQ==) | `96.55% <ø> (ø)` | :arrow_up: |
| [pandas/io/json/normalize.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL2pzb24vbm9ybWFsaXplLnB5) | `96.87% <ø> (ø)` | :arrow_up: |
| [pandas/core/indexes/multi.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvaW5kZXhlcy9tdWx0aS5weQ==) | `95.49% <ø> (ø)` | :arrow_up: |
| [pandas/util/\_decorators.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL3V0aWwvX2RlY29yYXRvcnMucHk=) | `91.34% <ø> (ø)` | :arrow_up: |
| [pandas/core/resample.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvcmVzYW1wbGUucHk=) | `96.99% <ø> (ø)` | :arrow_up: |
| [pandas/plotting/\_core.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL3Bsb3R0aW5nL19jb3JlLnB5) | `83.63% <ø> (ø)` | :arrow_up: |
| [pandas/io/packers.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL3BhY2tlcnMucHk=) | `88.08% <ø> (ø)` | :arrow_up: |
| [pandas/core/config.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvY29uZmlnLnB5) | `87.17% <ø> (ø)` | :arrow_up: |
| [pandas/core/util/hashing.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2NvcmUvdXRpbC9oYXNoaW5nLnB5) | `98.4% <ø> (ø)` | :arrow_up: |
| [pandas/io/parquet.py](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree#diff-cGFuZGFzL2lvL3BhcnF1ZXQucHk=) | `84.61% <ø> (ø)` | :arrow_up: |
| ... and [15 more](https://codecov.io/gh/pandas-dev/pandas/pull/23871/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=footer). Last update [e5c90e5...bb0e375](https://codecov.io/gh/pandas-dev/pandas/pull/23871?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

Thanks for taking care of those @alexander-ponomaroff 

I kept the issue open, as you mention that there are still 58 errors to fix. Was there any impediment to fix those, or there were just too many for a single PR?
@datapythonista No problem! The other errors were a bit problematic. Some of them didn't show the line number and file, and some showed error in the actual code and not the docs. I will further look into those to see if I can figure out what needs to be fixed.
Yes, unfortunately the introspection to detect where a function is defined doesn't work well if the function is created in a tricky way (and we do that somehow often for better code organization and not repeating code in pandas).

One option (tricky but effective) is check the docstring with for example `scripts/validate_docstrings.py pandas.Series.head` and then grep for the shot summary of any part that looks like it should be unique.

The good news is that I think many of the pending one in your list reuse docstring, so there are probably one third of the number in the list that need to fixed.
@datapythonista I will keep this in mind for the future, thanks!