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 initpandas 384 changes
Breaking changes 12
The default for inplace changed from False to <no_default>.
The inplace parameter's default changed from False to <no_default>.
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.
The default axis is now the index for boolean masks and the columns for DataFrame label selection; expressions support only the index.
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.
Raises ValueError when a non-unique column label in expr still evaluates to a DataFrame, because no row mask is available.
The default for inplace changed from False to <no_default>.
The default for inplace changes from False to <no_default>.
Inserting a DatetimeIndex or TimedeltaIndex as a column loses its freq, and a subsequent DataFrame.set_index() does not restore it.
Datetime-like data has a new default resolution.
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.
Pandas 3.0.0 supports Python 3.11 and higher.
Deprecations 35
Deprecated; pass dtype=False to disable type conversion, or parse date columns with to_datetime() after reading.
The convert_boolean keyword is deprecated and will be removed in a future version.
The convert_floating keyword is deprecated and will be removed in a future version.
The convert_integer keyword is deprecated and will be removed in a future version.
The convert_string keyword is deprecated and will be removed in a future version.
The infer_objects keyword is deprecated and will be removed in a future version.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated and will be removed in pandas 4.0.
Selecting labels with items will be deprecated; use DataFrame.select when all requested items are present in the columns, or an Index intersection otherwise.
Selecting labels with like will be deprecated; the notes recommend filtering column labels with str.contains and regex=False instead.
Selecting labels with regex will be deprecated; the notes recommend filtering column labels with str.contains instead.
Passing a dict to the data parameter is deprecated; use the DataFrame constructor or DataFrame.from_dict() instead.
lsuffix is deprecated; use suffixes instead.
rsuffix is deprecated; use suffixes instead.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated and will be removed in pandas 4.0; its default is now <no_default>.
The verify_integrity keyword is deprecated and will be removed in a future version; check result.index.is_unique directly instead.
The inplace keyword is deprecated and will be removed in pandas 4.0.
The inplace keyword is deprecated since pandas 3.1.0 and will be removed in pandas 4.0.
The 'fastparquet' and 'auto' engine options are deprecated; use 'pyarrow' or omit engine to use the default.
The dropna keyword is deprecated and will be removed in a future version; use DataFrame.dropna() before writing instead.
All float precision modes now use the same converter; the float_precision argument is deprecated and will be removed in a future version.
Passing a non-dict to from_dict is deprecated; use the DataFrame constructor instead.
The inplace keyword is deprecated and will be removed in pandas 4.0.
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.
This option is deprecated; use DataFrame.dropna() before writing instead.
Deprecated; pass dtype=False to disable type conversion, or parse date columns with to_datetime() after reading.
The pyxlsb engine emits a deprecation warning and will be removed in a future version; use calamine instead.
float_precision is deprecated because all float precision modes now use the same converter and the argument will be removed in a future version.
The xlrd engine emits a deprecation warning and will be removed in a future version; use calamine instead.
The future_stack parameter is deprecated and will be removed in a future pandas version.
The sort parameter is deprecated and will be removed in a future pandas version.
New APIs and options 9
The calamine engine supports Excel formats, including xls and xlsb, as an alternative to the xlrd and pyxlsb engines.
Adds cond for boolean masks, callables, and expressions; Series masks align to the filtered axis, while other array-like masks must match its length.
Adds na to control missing values in boolean masks: False or True substitutes that value, while "raise" raises a ValueError.
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.
Controls the number of threads used for parallel CSV reading; set it to 1 to disable parallel reading.
The mode.max_threads option can cap or disable parallel parsing of sufficiently large local uncompressed files read with the C engine.
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.
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".
Initial support is available for the new pd.col syntax.
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.
Behavior and default changes 18
The default for inplace changed from False to <no_default>.
Passing axis=1 filters columns instead of rows.
The documented default for inplace changes from False to <no_default>.
The default for inplace changed from False to <no_default>.
The documented default for allow_duplicates changes from lib.no_default to False.
The documented default for inplace changes from False to <no_default>.
The sort order is deterministic for a given input; mergesort and stable preserve the relative order of equal keys.
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.
Passing complib without complevel greater than 0 emits a UserWarning and writes the data uncompressed.
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.
The signature now uses <no_default> for engine instead of 'auto'; omitting engine uses the default.
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.
With dtype="category", numeric and boolean categories are inferred; values that do not all parse as numeric or boolean retain string categories.
A DatetimeIndex or TimedeltaIndex created from a column has freq=None; passing the index directly as keys preserves its freq.
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.
The displayed default for delimiter changes from None to <no_default>.
Reading certain URL schemes may require optional packages; S3 URLs require s3fs.
A dedicated string data type is the default.
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.
Clarifies that converters receive raw text, with empty fields passed as empty strings, before missing-value settings are applied to the returned value.
Clarifies that dtype does not change missing-value parsing; values recognized as missing remain NaN or the dtype’s NA value.
Documents that pyarrow is multithreaded and the C engine reads sufficiently large files in parallel.
Clarifies accepted header values and how inferred column labels handle duplicate and empty names.
Clarifies that independent chunk inference can produce mixed int and str values, object dtype after concatenation, and a DtypeWarning.
Documents quoting values as 0, 1, 2, or 3, corresponding to the csv.QUOTE_* constants.
File-like objects must have a read() method that accepts an optional size argument.
This is the first pandas release to support Python 3.15.
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.
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.