What’s new in 0.23.1 (June 12, 2018)#
This is a minor bug-fix release in the 0.23.x series and includes some small regression fixes and bug fixes. We recommend that all users upgrade to this version.
Warning
Starting January 1, 2019, pandas feature releases will support Python 3 only. See Dropping Python 2.7 for more.
Fixed regressions#
Comparing Series with datetime.date
We’ve reverted a 0.23.0 change to comparing a Series
holding datetimes and a datetime.date
object (GH 21152).
In pandas 0.22 and earlier, comparing a Series holding datetimes and datetime.date
objects would coerce the datetime.date
to a datetime before comparing.
This was inconsistent with Python, NumPy, and DatetimeIndex
, which never consider a datetime and datetime.date
equal.
In 0.23.0, we unified operations between DatetimeIndex and Series, and in the process changed comparisons between a Series of datetimes and datetime.date
without warning.
We’ve temporarily restored the 0.22.0 behavior, so datetimes and dates may again compare equal, but restore the 0.23.0 behavior in a future release.
To summarize, here’s the behavior in 0.22.0, 0.23.0, 0.23.1:
# 0.22.0... Silently coerce the datetime.date
>>> import datetime
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
0 True
1 False
dtype: bool
# 0.23.0... Do not coerce the datetime.date
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
0 False
1 False
dtype: bool
# 0.23.1... Coerce the datetime.date with a warning
>>> pd.Series(pd.date_range('2017', periods=2)) == datetime.date(2017, 1, 1)
/bin/python:1: FutureWarning: Comparing Series of datetimes with 'datetime.date'. Currently, the
'datetime.date' is coerced to a datetime. In the future pandas will
not coerce, and the values not compare equal to the 'datetime.date'.
To retain the current behavior, convert the 'datetime.date' to a
datetime with 'pd.Timestamp'.
#!/bin/python3
0 True
1 False
dtype: bool
In addition, ordering comparisons will raise a TypeError
in the future.
Other fixes
Reverted the ability of
to_sql()
to perform multivalue inserts as this caused regression in certain cases (GH 21103). In the future this will be made configurable.Fixed regression in the
DatetimeIndex.date
andDatetimeIndex.time
attributes in case of timezone-aware data:DatetimeIndex.time
returned a tz-aware time instead of tz-naive (GH 21267) andDatetimeIndex.date
returned incorrect date when the input date has a non-UTC timezone (GH 21230).Fixed regression in
pandas.io.json.json_normalize()
when called withNone
values in nested levels in JSON, and to not drop keys with value asNone
(GH 21158, GH 21356).Bug in
to_csv()
causes encoding error when compression and encoding are specified (GH 21241, GH 21118)Bug preventing pandas from being importable with -OO optimization (GH 21071)
Bug in
Categorical.fillna()
incorrectly raising aTypeError
whenvalue
the individual categories are iterable andvalue
is an iterable (GH 21097, GH 19788)Fixed regression in constructors coercing NA values like
None
to strings when passingdtype=str
(GH 21083)Regression in
pivot_table()
where an orderedCategorical
with missing values for the pivot’sindex
would give a mis-aligned result (GH 21133)Fixed regression in merging on boolean index/columns (GH 21119).
Performance improvements#
Bug fixes#
Groupby/resample/rolling
Bug in
DataFrame.agg()
where applying multiple aggregation functions to aDataFrame
with duplicated column names would cause a stack overflow (GH 21063)Bug in
GroupBy.ffill()
andGroupBy.bfill()
where the fill within a grouping would not always be applied as intended due to the implementations’ use of a non-stable sort (GH 21207)Bug in
GroupBy.rank()
where results did not scale to 100% when specifyingmethod='dense'
andpct=True
Bug in
pandas.DataFrame.rolling()
andpandas.Series.rolling()
which incorrectly accepted a 0 window size rather than raising (GH 21286)
Data-type specific
Bug in
Series.str.replace()
where the method throwsTypeError
on Python 3.5.2 (GH 21078)Bug in
Timedelta
where passing a float with a unit would prematurely round the float precision (GH 14156)Bug in
pandas.testing.assert_index_equal()
which raisedAssertionError
incorrectly, when comparing twoCategoricalIndex
objects with paramcheck_categorical=False
(GH 19776)
Sparse
Bug in
SparseArray.shape
which previously only returned the shapeSparseArray.sp_values
(GH 21126)
Indexing
Bug in
Series.reset_index()
where appropriate error was not raised with an invalid level name (GH 20925)Bug in
interval_range()
whenstart
/periods
orend
/periods
are specified with floatstart
orend
(GH 21161)Bug in
MultiIndex.set_names()
where error raised for aMultiIndex
withnlevels == 1
(GH 21149)Bug in
IntervalIndex
constructors where creating anIntervalIndex
from categorical data was not fully supported (GH 21243, GH 21253)Bug in
MultiIndex.sort_index()
which was not guaranteed to sort correctly withlevel=1
; this was also causing data misalignment in particularDataFrame.stack()
operations (GH 20994, GH 20945, GH 21052)
Plotting
New keywords (sharex, sharey) to turn on/off sharing of x/y-axis by subplots generated with pandas.DataFrame().groupby().boxplot() (GH 20968)
I/O
Bug in IO methods specifying
compression='zip'
which produced uncompressed zip archives (GH 17778, GH 21144)Bug in
DataFrame.to_stata()
which prevented exporting DataFrames to buffers and most file-like objects (GH 21041)Bug in
read_stata()
andStataReader
which did not correctly decode utf-8 strings on Python 3 from Stata 14 files (dta version 118) (GH 21244)Bug in IO JSON
read_json()
reading empty JSON schema withorient='table'
back toDataFrame
caused an error (GH 21287)
Reshaping
Bug in
concat()
where error was raised in concatenatingSeries
with numpy scalar and tuple names (GH 21015)Bug in
concat()
warning message providing the wrong guidance for future behavior (GH 21101)
Other
Contributors#
A total of 30 people contributed patches to this release. People with a “+” by their names contributed a patch for the first time.
Adam J. Stewart
Adam Kim +
Aly Sivji
Chalmer Lowe +
Damini Satya +
Dr. Irv
Gabe Fernando +
Giftlin Rajaiah
Jeff Reback
Jeremy Schendel +
Joris Van den Bossche
Kalyan Gokhale +
Kevin Sheppard
Matthew Roeschke
Max Kanter +
Ming Li
Pyry Kovanen +
Stefano Cianciulli
Tom Augspurger
Uddeshya Singh +
Wenhuan
William Ayd
chris-b1
gfyoung
h-vetinari
nprad +
ssikdar1 +
tmnhat2001
topper-123
zertrin +