unstale

pypi / pandas

pandas

What changed in pandas 2 to 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-22.

13 breaking35 deprecations9 new APIs and options2 performance18 behavior and defaults9 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.2 on npm

pandas 384 changes

Breaking changes 12

  • The default for inplace changed from False to <no_default>.

    3.1.0docs

  • The inplace parameter's default changed from False to <no_default>.

    3.1.0docs

  • The positional argument is now named arg. A callable or expression is treated as a boolean mask; other list-like values select labels, and a list-like of booleans warns because it may have been intended as a mask.

    3.1.0docs

  • The default axis is now the index for boolean masks and the columns for DataFrame label selection; expressions support only the index.

    3.1.0docs

  • Adds a length-2 suffixes parameter for overlapping column names; either value can be None to leave that side's column names unchanged, but not both.

    3.1.0docs

  • Raises ValueError when a non-unique column label in expr still evaluates to a DataFrame, because no row mask is available.

    3.1.0docs

  • The default for inplace changed from False to <no_default>.

    3.1.0docs

  • The default for inplace changes from False to <no_default>.

    3.1.0docs

  • Inserting a DatetimeIndex or TimedeltaIndex as a column loses its freq, and a subsequent DataFrame.set_index() does not restore it.

    3.1.0docs

  • Datetime-like data has a new default resolution.

    3.0.0release notes

  • The new stack implementation is the default as of pandas 3.0; dropna and sort have no impact on its result and must remain unspecified.

    3.0.0docs

  • Pandas 3.0.0 supports Python 3.11 and higher.

    3.0.0release notes

Deprecations 35

  • Deprecated; pass dtype=False to disable type conversion, or parse date columns with to_datetime() after reading.

    3.1.0docs

  • The convert_boolean keyword is deprecated and will be removed in a future version.

    3.1.0docs

  • The convert_floating keyword is deprecated and will be removed in a future version.

    3.1.0docs

  • The convert_integer keyword is deprecated and will be removed in a future version.

    3.1.0docs

  • The convert_string keyword is deprecated and will be removed in a future version.

    3.1.0docs

  • The infer_objects keyword is deprecated and will be removed in a future version.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • Selecting labels with items will be deprecated; use DataFrame.select when all requested items are present in the columns, or an Index intersection otherwise.

    3.1.0docs

  • Selecting labels with like will be deprecated; the notes recommend filtering column labels with str.contains and regex=False instead.

    3.1.0docs

  • Selecting labels with regex will be deprecated; the notes recommend filtering column labels with str.contains instead.

    3.1.0docs

  • Passing a dict to the data parameter is deprecated; use the DataFrame constructor or DataFrame.from_dict() instead.

    3.1.0docs

  • lsuffix is deprecated; use suffixes instead.

    3.1.0docs

  • rsuffix is deprecated; use suffixes instead.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0; its default is now <no_default>.

    3.1.0docs

  • The verify_integrity keyword is deprecated and will be removed in a future version; check result.index.is_unique directly instead.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docs

  • The inplace keyword is deprecated since pandas 3.1.0 and will be removed in pandas 4.0.

    3.1.0docs

  • The 'fastparquet' and 'auto' engine options are deprecated; use 'pyarrow' or omit engine to use the default.

    3.1.0docs

  • The dropna keyword is deprecated and will be removed in a future version; use DataFrame.dropna() before writing instead.

    3.1.0docsdocs

  • All float precision modes now use the same converter; the float_precision argument is deprecated and will be removed in a future version.

    3.1.0docsdocs

  • Passing a non-dict to from_dict is deprecated; use the DataFrame constructor instead.

    3.1.0docs

  • The inplace keyword is deprecated and will be removed in pandas 4.0.

    3.1.0docsdocs

  • The default engine for xlsx and xlsm files will change from openpyxl to calamine in a future version; set this option to keep the current behavior.

    3.1.0docs

  • This option is deprecated; use DataFrame.dropna() before writing instead.

    3.1.0docs

  • Deprecated; pass dtype=False to disable type conversion, or parse date columns with to_datetime() after reading.

    3.1.0docs

  • The pyxlsb engine emits a deprecation warning and will be removed in a future version; use calamine instead.

    3.1.0docs

  • float_precision is deprecated because all float precision modes now use the same converter and the argument will be removed in a future version.

    3.1.0docs

  • The xlrd engine emits a deprecation warning and will be removed in a future version; use calamine instead.

    3.1.0docs

  • The future_stack parameter is deprecated and will be removed in a future pandas version.

    3.0.0docs

  • The sort parameter is deprecated and will be removed in a future pandas version.

    3.0.0docs

New APIs and options 9

  • The calamine engine supports Excel formats, including xls and xlsb, as an alternative to the xlrd and pyxlsb engines.

    3.1.0docs

  • Adds cond for boolean masks, callables, and expressions; Series masks align to the filtered axis, while other array-like masks must match its length.

    3.1.0docsdocs

  • Adds na to control missing values in boolean masks: False or True substitutes that value, while "raise" raises a ValueError.

    3.1.0docsdocs

  • Adds a method to select columns by label or expression and include computed columns; it returns a DataFrame, and later items can refer to columns computed earlier in the call.

    3.1.0docs

  • Controls the number of threads used for parallel CSV reading; set it to 1 to disable parallel reading.

    3.1.0docs

  • The mode.max_threads option can cap or disable parallel parsing of sufficiently large local uncompressed files read with the C engine.

    3.1.0docs

  • Accepts a boolean mask, callable, or pandas.col() expression to filter rows; Series masks align on the index, and other array-like masks must match its length.

    3.1.0docs

  • Controls how missing values in the mask are handled: they are treated as False by default, can be kept with True, or can raise an error with "raise".

    3.1.0docs

  • Initial support is available for the new pd.col syntax.

    3.0.0release notes

Performance 1

  • Eligible reads of large local, uncompressed files with the C engine are split into chunks and parsed in multiple threads; results match serial reads.

    3.1.0docs

Behavior and default changes 18

  • The default for inplace changed from False to <no_default>.

    3.1.0docs

  • Passing axis=1 filters columns instead of rows.

    3.1.0docs

  • The documented default for inplace changes from False to <no_default>.

    3.1.0docs

  • The default for inplace changed from False to <no_default>.

    3.1.0docs

  • The documented default for allow_duplicates changes from lib.no_default to False.

    3.1.0docs

  • The documented default for inplace changes from False to <no_default>.

    3.1.0docs

  • The sort order is deterministic for a given input; mergesort and stable preserve the relative order of equal keys.

    3.1.0docs

  • Appending requires an existing table-format object and exactly matching columns in the same order; creating a key with append=True defaults format to table.

    3.1.0docs

  • Passing complib without complevel greater than 0 emits a UserWarning and writes the data uncompressed.

    3.1.0docs

  • nan_rep applies only to string columns in table format; the default uses a non-colliding sentinel, while a supplied value is read back as missing and later appends reuse the stored value.

    3.1.0docs

  • The signature now uses <no_default> for engine instead of 'auto'; omitting engine uses the default.

    3.1.0docs

  • The path may be a URL using schemes including http, ftp, s3, gs, and file; some schemes require additional packages such as s3fs for S3.

    3.1.0docs

  • With dtype="category", numeric and boolean categories are inferred; values that do not all parse as numeric or boolean retain string categories.

    3.1.0docs

  • A DatetimeIndex or TimedeltaIndex created from a column has freq=None; passing the index directly as keys preserves its freq.

    3.1.0docs

  • Header indices count only non-blank, non-commented lines when skip_blank_lines=True; inferred duplicate and empty labels are renamed, and header labels are strings.

    3.1.0docs

  • The displayed default for delimiter changes from None to <no_default>.

    3.1.0docsdocs

  • Reading certain URL schemes may require optional packages; S3 URLs require s3fs.

    3.1.0docs

  • A dedicated string data type is the default.

    3.0.0release notes

Fixes and other changes 9

  • Files written by to_hdf use a pandas-specific layout and are intended for read_hdf() or HDFStore, not as a general-purpose interchange format for arbitrary HDF5 consumers.

    3.1.0docs

  • Clarifies that converters receive raw text, with empty fields passed as empty strings, before missing-value settings are applied to the returned value.

    3.1.0docsdocs

  • Clarifies that dtype does not change missing-value parsing; values recognized as missing remain NaN or the dtype’s NA value.

    3.1.0docsdocs

  • Documents that pyarrow is multithreaded and the C engine reads sufficiently large files in parallel.

    3.1.0docsdocs

  • Clarifies accepted header values and how inferred column labels handle duplicate and empty names.

    3.1.0docs

  • Clarifies that independent chunk inference can produce mixed int and str values, object dtype after concatenation, and a DtypeWarning.

    3.1.0docsdocs

  • Documents quoting values as 0, 1, 2, or 3, corresponding to the csv.QUOTE_* constants.

    3.1.0docs

  • File-like objects must have a read() method that accepts an optional size argument.

    3.1.0docs

  • This is the first pandas release to support Python 3.15.

    3.0.6release notes

pandas 22 changes

Breaking changes 1

  • Copy-on-Write makes behavior more predictable: one statement cannot update more than one object, and indexing operations or methods won’t have side-effects.

    2.0.0docs

Performance 1

  • Starting from pandas 2.0, most optimizations enabled by Copy-on-Write are implemented and supported, with delayed copies improving average performance and memory usage.

    2.0.0docs