Skip to content

Commit 50f8b9f

Browse files
DOC: Whatsnew cleanup (#16245)
* DOC: Whatsnew cleanup * DOC: remove hash_tuples reference
1 parent 2aa6e79 commit 50f8b9f

File tree

1 file changed

+38
-41
lines changed

1 file changed

+38
-41
lines changed

doc/source/whatsnew/v0.20.0.txt

+38-41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
.. _whatsnew_0200:
22

3-
v0.20.0 (May 12, 2017)
4-
------------------------
3+
v0.20.0 (May 4, 2017)
4+
---------------------
55

66
This is a major release from 0.19.2 and includes a number of API changes, deprecations, new features,
77
enhancements, and performance improvements along with a large number of bug fixes. We recommend that all
@@ -17,8 +17,8 @@ Highlights include:
1717
- Improved user API when accessing levels in ``.groupby()``, see :ref:`here <whatsnew_0200.enhancements.groupby_access>`
1818
- Improved support for ``UInt64`` dtypes, see :ref:`here <whatsnew_0200.enhancements.uint64_support>`
1919
- A new orient for JSON serialization, ``orient='table'``, that uses the :ref:`Table Schema spec <whatsnew_0200.enhancements.table_schema>`
20-
- Experimental support for exporting ``DataFrame.style`` formats to Excel , see :ref:`here <whatsnew_0200.enhancements.style_excel>`
21-
- Window Binary Corr/Cov operations now return a MultiIndexed ``DataFrame`` rather than a ``Panel``, as ``Panel`` is now deprecated, see :ref:`here <whatsnew_0200.api_breaking.rolling_pairwise>`
20+
- Experimental support for exporting ``DataFrame.style`` formats to Excel, see :ref:`here <whatsnew_0200.enhancements.style_excel>`
21+
- Window binary corr/cov operations now return a MultiIndexed ``DataFrame`` rather than a ``Panel``, as ``Panel`` is now deprecated, see :ref:`here <whatsnew_0200.api_breaking.rolling_pairwise>`
2222
- Support for S3 handling now uses ``s3fs``, see :ref:`here <whatsnew_0200.api_breaking.s3>`
2323
- Google BigQuery support now uses the ``pandas-gbq`` library, see :ref:`here <whatsnew_0200.api_breaking.gbq>`
2424
- Switched the test framework to use `pytest <http://doc.pytest.org/en/latest>`__ (:issue:`13097`)
@@ -44,10 +44,10 @@ New features
4444
``agg`` API
4545
^^^^^^^^^^^
4646

47-
Series & DataFrame have been enhanced to support the aggregation API. This is an already familiar API that
48-
is supported for groupby, window operations, and resampling. This allows one to express aggregation operations
49-
in a single concise way by using :meth:`~DataFrame.agg`,
50-
and :meth:`~DataFrame.transform`. The full documentation is :ref:`here <basics.aggregate>` (:issue:`1623`).
47+
Series & DataFrame have been enhanced to support the aggregation API. This is a familiar API
48+
from groupby, window operations, and resampling. This allows aggregation operations in a concise
49+
by using :meth:`~DataFrame.agg`, and :meth:`~DataFrame.transform`. The full documentation
50+
is :ref:`here <basics.aggregate>` (:issue:`1623`).
5151

5252
Here is a sample
5353

@@ -66,28 +66,28 @@ Using a single function is equivalent to ``.apply``.
6666

6767
df.agg('sum')
6868

69-
Multiple functions in lists.
69+
Multiple aggregations with a list of functions.
7070

7171
.. ipython:: python
7272

7373
df.agg(['sum', 'min'])
7474

75-
Using a dict provides the ability to have selective aggregation per column.
76-
You will get a matrix-like output of all of the aggregators. The output will consist
77-
of all unique functions. Those that are not noted for a particular column will be ``NaN``:
75+
Using a dict provides the ability to apply specific aggregations per column.
76+
You will get a matrix-like output of all of the aggregators. The output has one column
77+
per unique function. Those functions applied to a particular column will be ``NaN``:
7878

7979
.. ipython:: python
8080

8181
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
8282

83-
The API also supports a ``.transform()`` function to provide for broadcasting results.
83+
The API also supports a ``.transform()`` function for broadcasting results.
8484

8585
.. ipython:: python
8686
:okwarning:
8787

8888
df.transform(['abs', lambda x: x - x.min()])
8989

90-
When presented with mixed dtypes that cannot aggregate, ``.agg()`` will only take the valid
90+
When presented with mixed dtypes that cannot be aggregated, ``.agg()`` will only take the valid
9191
aggregations. This is similiar to how groupby ``.agg()`` works. (:issue:`15015`)
9292

9393
.. ipython:: python
@@ -107,7 +107,7 @@ aggregations. This is similiar to how groupby ``.agg()`` works. (:issue:`15015`)
107107
``dtype`` keyword for data IO
108108
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
109109

110-
The ``dtype`` keyword argument in the :func:`read_csv` function for specifying the types of parsed columns is now supported with the ``'python'`` engine (:issue:`14295`). See the :ref:`io docs <io.dtypes>` for more information.
110+
The ``'python'`` engine for :func:`read_csv` now accepts the ``dtype`` keyword argument for specifying the types of specific columns (:issue:`14295`). See the :ref:`io docs <io.dtypes>` for more information.
111111

112112
.. ipython:: python
113113
:suppress:
@@ -156,7 +156,7 @@ Commonly called 'unix epoch' or POSIX time. This was the previous default, so th
156156
Groupby Enhancements
157157
^^^^^^^^^^^^^^^^^^^^
158158

159-
Strings passed to ``DataFrame.groupby()`` as the ``by`` parameter may now reference either column names or index level names (:issue:`5677`)
159+
Strings passed to ``DataFrame.groupby()`` as the ``by`` parameter may now reference either column names or index level names.
160160

161161
.. ipython:: python
162162

@@ -172,6 +172,9 @@ Strings passed to ``DataFrame.groupby()`` as the ``by`` parameter may now refere
172172

173173
df.groupby(['second', 'A']).sum()
174174

175+
Previously, only column names could be referenced. (:issue:`5677`)
176+
177+
175178
.. _whatsnew_0200.enhancements.compressed_urls:
176179

177180
Better support for compressed URLs in ``read_csv``
@@ -181,8 +184,8 @@ The compression code was refactored (:issue:`12688`). As a result, reading
181184
dataframes from URLs in :func:`read_csv` or :func:`read_table` now supports
182185
additional compression methods: ``xz``, ``bz2``, and ``zip`` (:issue:`14570`).
183186
Previously, only ``gzip`` compression was supported. By default, compression of
184-
URLs and paths are now both inferred using their file extensions. Additionally,
185-
support for bz2 compression in the python 2 c-engine improved (:issue:`14874`).
187+
URLs and paths are now inferred using their file extensions. Additionally,
188+
support for bz2 compression in the python 2 C-engine improved (:issue:`14874`).
186189

187190
.. ipython:: python
188191

@@ -203,7 +206,7 @@ Pickle file I/O now supports compression
203206
:func:`read_pickle`, :meth:`DataFame.to_pickle` and :meth:`Series.to_pickle`
204207
can now read from and write to compressed pickle files. Compression methods
205208
can be an explicit parameter or be inferred from the file extension.
206-
See :ref:`the docs here <io.pickle.compression>`
209+
See :ref:`the docs here. <io.pickle.compression>`
207210

208211
.. ipython:: python
209212

@@ -432,7 +435,7 @@ New behavior:
432435
c
433436
c.categories
434437

435-
Furthermore, this allows one to bin *other* data with these same bins, with ``NaN`` represents a missing
438+
Furthermore, this allows one to bin *other* data with these same bins, with ``NaN`` representing a missing
436439
value similar to other dtypes.
437440

438441
.. ipython:: python
@@ -465,19 +468,17 @@ Selecting via a scalar value that is contained *in* the intervals.
465468
Other Enhancements
466469
^^^^^^^^^^^^^^^^^^
467470

468-
- ``DataFrame.rolling()`` now accepts the parameter ``closed='right'|'left'|'both'|'neither'`` to choose the rolling window endpoint closedness. See the :ref:`documentation <stats.rolling_window.endpoints>` (:issue:`13965`)
471+
- ``DataFrame.rolling()`` now accepts the parameter ``closed='right'|'left'|'both'|'neither'`` to choose the rolling window-endpoint closedness. See the :ref:`documentation <stats.rolling_window.endpoints>` (:issue:`13965`)
469472
- Integration with the ``feather-format``, including a new top-level ``pd.read_feather()`` and ``DataFrame.to_feather()`` method, see :ref:`here <io.feather>`.
470473
- ``Series.str.replace()`` now accepts a callable, as replacement, which is passed to ``re.sub`` (:issue:`15055`)
471474
- ``Series.str.replace()`` now accepts a compiled regular expression as a pattern (:issue:`15446`)
472475
- ``Series.sort_index`` accepts parameters ``kind`` and ``na_position`` (:issue:`13589`, :issue:`14444`)
473476
- ``DataFrame`` has gained a ``nunique()`` method to count the distinct values over an axis (:issue:`14336`).
474477
- ``DataFrame`` has gained a ``melt()`` method, equivalent to ``pd.melt()``, for unpivoting from a wide to long format (:issue:`12640`).
475478
- ``DataFrame.groupby()`` has gained a ``.nunique()`` method to count the distinct values for all columns within each group (:issue:`14336`, :issue:`15197`).
476-
477479
- ``pd.read_excel()`` now preserves sheet order when using ``sheetname=None`` (:issue:`9930`)
478480
- Multiple offset aliases with decimal points are now supported (e.g. ``0.5min`` is parsed as ``30s``) (:issue:`8419`)
479481
- ``.isnull()`` and ``.notnull()`` have been added to ``Index`` object to make them more consistent with the ``Series`` API (:issue:`15300`)
480-
481482
- New ``UnsortedIndexError`` (subclass of ``KeyError``) raised when indexing/slicing into an
482483
unsorted MultiIndex (:issue:`11897`). This allows differentiation between errors due to lack
483484
of sorting or an incorrect key. See :ref:`here <advanced.unsorted>`
@@ -497,20 +498,19 @@ Other Enhancements
497498
- ``Timedelta.isoformat`` method added for formatting Timedeltas as an `ISO 8601 duration`_. See the :ref:`Timedelta docs <timedeltas.isoformat>` (:issue:`15136`)
498499
- ``.select_dtypes()`` now allows the string ``datetimetz`` to generically select datetimes with tz (:issue:`14910`)
499500
- The ``.to_latex()`` method will now accept ``multicolumn`` and ``multirow`` arguments to use the accompanying LaTeX enhancements
500-
501501
- ``pd.merge_asof()`` gained the option ``direction='backward'|'forward'|'nearest'`` (:issue:`14887`)
502502
- ``Series/DataFrame.asfreq()`` have gained a ``fill_value`` parameter, to fill missing values (:issue:`3715`).
503503
- ``Series/DataFrame.resample.asfreq`` have gained a ``fill_value`` parameter, to fill missing values during resampling (:issue:`3715`).
504-
- ``pandas.util.hashing`` has gained a ``hash_tuples`` routine, and ``hash_pandas_object`` has gained the ability to hash a ``MultiIndex`` (:issue:`15224`)
504+
- :func:`pandas.util.hash_pandas_object` has gained the ability to hash a ``MultiIndex`` (:issue:`15224`)
505505
- ``Series/DataFrame.squeeze()`` have gained the ``axis`` parameter. (:issue:`15339`)
506506
- ``DataFrame.to_excel()`` has a new ``freeze_panes`` parameter to turn on Freeze Panes when exporting to Excel (:issue:`15160`)
507-
- ``pd.read_html()`` will parse multiple header rows, creating a multiindex header. (:issue:`13434`).
507+
- ``pd.read_html()`` will parse multiple header rows, creating a MutliIndex header. (:issue:`13434`).
508508
- HTML table output skips ``colspan`` or ``rowspan`` attribute if equal to 1. (:issue:`15403`)
509-
- ``pd.io.api.Styler`` template now has blocks for easier extension, :ref:`see the example notebook <style.ipynb#Subclassing>` (:issue:`15649`)
509+
- :class:`pandas.io.formats.style.Styler`` template now has blocks for easier extension, :ref:`see the example notebook <style.ipynb#Subclassing>` (:issue:`15649`)
510+
- :meth:`pandas.io.formats.style.Styler.render` now accepts ``**kwargs`` to allow user-defined variables in the template (:issue:`15649`)
510511
- ``pd.io.api.Styler.render`` now accepts ``**kwargs`` to allow user-defined variables in the template (:issue:`15649`)
511-
- Compatability with Jupyter notebook 5.0; MultiIndex column labels are left-aligned and MultiIndex row-labels are top-aligned (:issue:`15379`)
512-
513-
- ``TimedeltaIndex`` now has a custom datetick formatter specifically designed for nanosecond level precision (:issue:`8711`)
512+
- Compatibility with Jupyter notebook 5.0; MultiIndex column labels are left-aligned and MultiIndex row-labels are top-aligned (:issue:`15379`)
513+
- ``TimedeltaIndex`` now has a custom date-tick formatter specifically designed for nanosecond level precision (:issue:`8711`)
514514
- ``pd.api.types.union_categoricals`` gained the ``ignore_ordered`` argument to allow ignoring the ordered attribute of unioned categoricals (:issue:`13410`). See the :ref:`categorical union docs <categorical.union>` for more information.
515515
- ``DataFrame.to_latex()`` and ``DataFrame.to_string()`` now allow optional header aliases. (:issue:`15536`)
516516
- Re-enable the ``parse_dates`` keyword of ``pd.read_excel()`` to parse string columns as dates (:issue:`14326`)
@@ -524,9 +524,8 @@ Other Enhancements
524524
- ``pd.read_csv()`` now supports the ``error_bad_lines`` and ``warn_bad_lines`` arguments for the Python parser (:issue:`15925`)
525525
- The ``display.show_dimensions`` option can now also be used to specify
526526
whether the length of a ``Series`` should be shown in its repr (:issue:`7117`).
527-
- ``parallel_coordinates()`` has gained a ``sort_labels`` keyword arg that sorts class labels and the colours assigned to them (:issue:`15908`)
527+
- ``parallel_coordinates()`` has gained a ``sort_labels`` keyword argument that sorts class labels and the colors assigned to them (:issue:`15908`)
528528
- Options added to allow one to turn on/off using ``bottleneck`` and ``numexpr``, see :ref:`here <basics.accelerate>` (:issue:`16157`)
529-
530529
- ``DataFrame.style.bar()`` now accepts two more options to further customize the bar chart. Bar alignment is set with ``align='left'|'mid'|'zero'``, the default is "left", which is backward compatible; You can now pass a list of ``color=[color_negative, color_positive]``. (:issue:`14757`)
531530

532531

@@ -653,7 +652,7 @@ Accessing datetime fields of Index now return Index
653652
The datetime-related attributes (see :ref:`here <timeseries.components>`
654653
for an overview) of ``DatetimeIndex``, ``PeriodIndex`` and ``TimedeltaIndex`` previously
655654
returned numpy arrays. They will now return a new ``Index`` object, except
656-
in the case of a boolean field, where the result will stil be a boolean ndarray. (:issue:`15022`)
655+
in the case of a boolean field, where the result will still be a boolean ndarray. (:issue:`15022`)
657656

658657
Previous behaviour:
659658

@@ -682,7 +681,7 @@ pd.unique will now be consistent with extension types
682681
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
683682

684683
In prior versions, using ``Series.unique()`` and :func:`unique` on ``Categorical`` and tz-aware
685-
datatypes would yield different return types. These are now made consistent. (:issue:`15903`)
684+
data-types would yield different return types. These are now made consistent. (:issue:`15903`)
686685

687686
- Datetime tz-aware
688687

@@ -1044,7 +1043,7 @@ HDFStore where string comparison
10441043
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10451044

10461045
In previous versions most types could be compared to string column in a ``HDFStore``
1047-
usually resulting in an invalid comparsion, returning an empty result frame. These comparisions will now raise a
1046+
usually resulting in an invalid comparison, returning an empty result frame. These comparisons will now raise a
10481047
``TypeError`` (:issue:`15492`)
10491048

10501049
.. ipython:: python
@@ -1085,8 +1084,8 @@ Index.intersection and inner join now preserve the order of the left Index
10851084
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10861085

10871086
:meth:`Index.intersection` now preserves the order of the calling ``Index`` (left)
1088-
instead of the other ``Index`` (right) (:issue:`15582`). This affects the inner
1089-
joins, :meth:`DataFrame.join` and :func:`merge`, and the ``.align`` methods.
1087+
instead of the other ``Index`` (right) (:issue:`15582`). This affects inner
1088+
joins, :meth:`DataFrame.join` and :func:`merge`, and the ``.align`` method.
10901089

10911090
- ``Index.intersection``
10921091

@@ -1141,7 +1140,7 @@ Pivot Table always returns a DataFrame
11411140
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11421141

11431142
The documentation for :meth:`pivot_table` states that a ``DataFrame`` is *always* returned. Here a bug
1144-
is fixed that allowed this to return a ``Series`` under a narrow circumstance. (:issue:`4386`)
1143+
is fixed that allowed this to return a ``Series`` under certain circumstance. (:issue:`4386`)
11451144

11461145
.. ipython:: python
11471146

@@ -1199,7 +1198,6 @@ Other API Changes
11991198
- ``NaT`` will now returns ``NaT`` for ``tz_localize`` and ``tz_convert``
12001199
methods (:issue:`15830`)
12011200
- ``DataFrame`` and ``Panel`` constructors with invalid input will now raise ``ValueError`` rather than ``PandasError``, if called with scalar inputs and not axes (:issue:`15541`)
1202-
12031201
- ``DataFrame`` and ``Panel`` constructors with invalid input will now raise ``ValueError`` rather than ``pandas.core.common.PandasError``, if called with scalar inputs and not axes; The exception ``PandasError`` is removed as well. (:issue:`15541`)
12041202
- The exception ``pandas.core.common.AmbiguousIndexError`` is removed as it is not referenced (:issue:`15541`)
12051203

@@ -1324,7 +1322,6 @@ Deprecate ``.ix``
13241322

13251323
The ``.ix`` indexer is deprecated, in favor of the more strict ``.iloc`` and ``.loc`` indexers. ``.ix`` offers a lot of magic on the inference of what the user wants to do. To wit, ``.ix`` can decide to index *positionally* OR via *labels*, depending on the data type of the index. This has caused quite a bit of user confusion over the years. The full indexing documentation are :ref:`here <indexing>`. (:issue:`14218`)
13261324

1327-
13281325
The recommended methods of indexing are:
13291326

13301327
- ``.loc`` if you want to *label* index
@@ -1720,7 +1717,7 @@ Reshaping
17201717
- Bug in ``DataFrame.pivot_table()`` where ``dropna=True`` would not drop all-NaN columns when the columns was a ``category`` dtype (:issue:`15193`)
17211718
- Bug in ``pd.melt()`` where passing a tuple value for ``value_vars`` caused a ``TypeError`` (:issue:`15348`)
17221719
- Bug in ``pd.pivot_table()`` where no error was raised when values argument was not in the columns (:issue:`14938`)
1723-
- Bug in ``pd.concat()`` in which concatting with an empty dataframe with ``join='inner'`` was being improperly handled (:issue:`15328`)
1720+
- Bug in ``pd.concat()`` in which concatenating with an empty dataframe with ``join='inner'`` was being improperly handled (:issue:`15328`)
17241721
- Bug with ``sort=True`` in ``DataFrame.join`` and ``pd.merge`` when joining on indexes (:issue:`15582`)
17251722
- Bug in ``DataFrame.nsmallest`` and ``DataFrame.nlargest`` where identical values resulted in duplicated rows (:issue:`15297`)
17261723

0 commit comments

Comments
 (0)