v0.20.2 (June 4, 2017)

This is a minor bug-fix release in the 0.20.x series and includes some small regression fixes, bug fixes and performance improvements. We recommend that all users upgrade to this version.


  • Unblocked access to additional compression types supported in pytables: ‘blosc:blosclz, ‘blosc:lz4’, ‘blosc:lz4hc’, ‘blosc:snappy’, ‘blosc:zlib’, ‘blosc:zstd’ (GH14478)
  • Series provides a to_latex method (GH16180)
  • A new groupby method ngroup(), parallel to the existing cumcount(), has been added to return the group order (GH11642); see here.

Performance Improvements

  • Performance regression fix when indexing with a list-like (GH16285)
  • Performance regression fix for MultiIndexes (GH16319, GH16346)
  • Improved performance of .clip() with scalar arguments (GH15400)
  • Improved performance of groupby with categorical groupers (GH16413)
  • Improved performance of MultiIndex.remove_unused_levels() (GH16556)

Bug Fixes

  • Silenced a warning on some Windows environments about “tput: terminal attributes: No such device or address” when detecting the terminal size. This fix only applies to python 3 (GH16496)
  • Bug in using pathlib.Path or py.path.local objects with io functions (GH16291)
  • Bug in Index.symmetric_difference() on two equal MultiIndex’s, results in a TypeError (GH13490)
  • Bug in DataFrame.update() with overwrite=False and NaN values (GH15593)
  • Passing an invalid engine to read_csv() now raises an informative ValueError rather than UnboundLocalError. (GH16511)
  • Bug in unique() on an array of tuples (GH16519)
  • Bug in cut() when labels are set, resulting in incorrect label ordering (GH16459)
  • Fixed a compatibility issue with IPython 6.0’s tab completion showing deprecation warnings on Categoricals (GH16409)


  • Bug in to_numeric() in which empty data inputs were causing a segfault of the interpreter (GH16302)
  • Silence numpy warnings when broadcasting DataFrame to Series with comparison ops (GH16378, GH16306)


  • Bug in DataFrame.reset_index(level=) with single level index (GH16263)
  • Bug in partial string indexing with a monotonic, but not strictly-monotonic, index incorrectly reversing the slice bounds (GH16515)
  • Bug in MultiIndex.remove_unused_levels() that would not return a MultiIndex equal to the original. (GH16556)


  • Bug in read_csv() when comment is passed in a space delimited text file (GH16472)
  • Bug in read_csv() not raising an exception with nonexistent columns in usecols when it had the correct length (GH14671)
  • Bug that would force importing of the clipboard routines unnecessarily, potentially causing an import error on startup (GH16288)
  • Bug that raised IndexError when HTML-rendering an empty DataFrame (GH15953)
  • Bug in read_csv() in which tarfile object inputs were raising an error in Python 2.x for the C engine (GH16530)
  • Bug where DataFrame.to_html() ignored the index_names parameter (GH16493)
  • Bug where pd.read_hdf() returns numpy strings for index names (GH13492)
  • Bug in HDFStore.select_as_multiple() where start/stop arguments were not respected (GH16209)


  • Bug in DataFrame.plot with a single column and a list-like color (GH3486)
  • Bug in plot where NaT in DatetimeIndex results in Timestamp.min (GH12405)
  • Bug in DataFrame.boxplot where figsize keyword was not respected for non-grouped boxplots (GH11959)


  • Bug in creating a time-based rolling window on an empty DataFrame (GH15819)
  • Bug in rolling.cov() with offset window (GH16058)
  • Bug in .resample() and .groupby() when aggregating on integers (GH16361)


  • Bug in construction of SparseDataFrame from scipy.sparse.dok_matrix (GH16179)


  • Bug in DataFrame.stack with unsorted levels in MultiIndex columns (GH16323)
  • Bug in pd.wide_to_long() where no error was raised when i was not a unique identifier (GH16382)
  • Bug in Series.isin(..) with a list of tuples (GH16394)
  • Bug in construction of a DataFrame with mixed dtypes including an all-NaT column. (GH16395)
  • Bug in DataFrame.agg() and Series.agg() with aggregating on non-callable attributes (GH16405)


  • Bug in .interpolate(), where limit_direction was not respected when limit=None (default) was passed (GH16282)


  • Fixed comparison operations considering the order of the categories when both categoricals are unordered (GH16014)


  • Bug in DataFrame.drop() with an empty-list with non-unique indices (GH16270)


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

  • Aaron Barber +
  • Andrew 亮 +
  • Becky Sweger +
  • Christian Prinoth +
  • Christian Stade-Schuldt +
  • DSM
  • Erik Fredriksen +
  • Hugues Valois +
  • Jeff Reback
  • Jeff Tratner
  • JimStearns206 +
  • John W. O’Brien
  • Joris Van den Bossche
  • JosephWagner +
  • Keith Webber +
  • Mehmet Ali “Mali” Akmanalp +
  • Pankaj Pandey
  • Patrick Luo +
  • Patrick O’Melveny +
  • Pietro Battiston
  • RobinFiveWords +
  • Ryan Hendrickson +
  • SimonBaron +
  • Tom Augspurger
  • WBare +
  • bpraggastis +
  • chernrick +
  • chris-b1
  • economy +
  • gfyoung
  • jaredsnyder +
  • keitakurita +
  • linebp
  • lloydkirk +
Scroll To Top