.. _whatsnew_0241:

Whats new in 0.24.1 (February 3, 2019)
--------------------------------------

.. warning::

   The 0.24.x series of releases will be the last to support Python 2. Future feature
   releases will support Python 3 only. See `Dropping Python 2.7 <https://pandas.pydata.org/pandas-docs/version/0.24/install.html#install-dropping-27>`_ for more.

{{ header }}

These are the changes in pandas 0.24.1. See :ref:`release` for a full changelog
including other versions of pandas. See :ref:`whatsnew_0240` for the 0.24.0 changelog.

.. _whatsnew_0241.api:

API changes
~~~~~~~~~~~

Changing the ``sort`` parameter for :class:`Index` set operations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The default ``sort`` value for :meth:`Index.union` has changed from ``True`` to ``None`` (:issue:`24959`).
The default *behavior*, however, remains the same: the result is sorted, unless

1. ``self`` and ``other`` are identical
2. ``self`` or ``other`` is empty
3. ``self`` or ``other`` contain values that can not be compared (a ``RuntimeWarning`` is raised).

This change will allow ``sort=True`` to mean "always sort" in a future release.

The same change applies to :meth:`Index.difference` and :meth:`Index.symmetric_difference`, which
would not sort the result when the values could not be compared.

The `sort` option for :meth:`Index.intersection` has changed in three ways.

1. The default has changed from ``True`` to ``False``, to restore the
   pandas 0.23.4 and earlier behavior of not sorting by default.
2. The behavior of ``sort=True`` can now be obtained with ``sort=None``.
   This will sort the result only if the values in ``self`` and ``other``
   are not identical.
3. The value ``sort=True`` is no longer allowed. A future version of pandas
   will properly support ``sort=True`` meaning "always sort".

.. _whatsnew_0241.regressions:

Fixed regressions
~~~~~~~~~~~~~~~~~

- Fixed regression in :meth:`DataFrame.to_dict` with ``records`` orient raising an
  ``AttributeError`` when the ``DataFrame`` contained more than 255 columns, or
  wrongly converting column names that were not valid python identifiers (:issue:`24939`, :issue:`24940`).
- Fixed regression in :func:`read_sql` when passing certain queries with MySQL/pymysql (:issue:`24988`).
- Fixed regression in :class:`Index.intersection` incorrectly sorting the values by default (:issue:`24959`).
- Fixed regression in :func:`merge` when merging an empty ``DataFrame`` with multiple timezone-aware columns on one of the timezone-aware columns (:issue:`25014`).
- Fixed regression in :meth:`Series.rename_axis` and :meth:`DataFrame.rename_axis` where passing ``None`` failed to remove the axis name (:issue:`25034`)
- Fixed regression in :func:`to_timedelta` with `box=False` incorrectly returning a ``datetime64`` object instead of a ``timedelta64`` object (:issue:`24961`)
- Fixed regression where custom hashable types could not be used as column keys in :meth:`DataFrame.set_index` (:issue:`24969`)

.. _whatsnew_0241.bug_fixes:

Bug fixes
~~~~~~~~~

**Reshaping**

- Bug in :meth:`DataFrame.groupby` with :class:`Grouper` when there is a time change (DST) and grouping frequency is ``'1d'`` (:issue:`24972`)

**Visualization**

- Fixed the warning for implicitly registered matplotlib converters not showing. See :ref:`whatsnew_0211.converters` for more (:issue:`24963`).

**Other**

- Fixed AttributeError when printing a DataFrame's HTML repr after accessing the IPython config object (:issue:`25036`)

.. _whatsnew_0.241.contributors:

Contributors
~~~~~~~~~~~~

.. Including the contributors hardcoded for this release, as backporting with
   MeeseeksDev loses the commit authors

A total of 7 people contributed patches to this release. People with a "+" by their names contributed a patch for the first time.

* Alex Buchkovsky
* Roman Yurchak
* h-vetinari
* jbrockmendel
* Jeremy Schendel
* Joris Van den Bossche
* Tom Augspurger
