Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion web/pandas/_templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,11 @@
</nav>
</header>
<main role="main">
<div class="container">
{% block body_container %}
<div class="container container-main">
{% block body %}{% endblock %}
</div>
{% endblock %}
</main>
<footer class="container pt-4 pt-md-5 border-top">
<ul class="list-inline social-buttons float-end">
Expand Down
125 changes: 125 additions & 0 deletions web/pandas/community/blog/pandas-3.0-release-candidate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
Title: pandas 3.0.0 release candidate ready for testing
Date: 2025-12-12

# pandas 3.0.0 release candidate ready for testing!

We're excited to announce the release candidate for pandas 3.0. This major
Comment on lines +4 to +6
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the exclamation mark need escaping or something?

Image

release brings significant improvements to pandas, but also features some
potentially breaking changes.

To ensure a smooth pandas 3.0 release, we can use your help to [test the
release candidate now](#call-to-action-test-the-release-candidate).

## Highlights of pandas 3.0

pandas 3.0 introduces several major enhancements:

- **Dedicated string data type by default**: String columns are now inferred as
the new `str` dtype instead of `object`, providing better performance and type
safety
- **Consistent copy/view behaviour with Copy-on-Write (CoW)** (a.k.a. getting
rid of the SettingWithCopyWarning): More predictable and consistent behavior
for all operations, with improved performance through avoiding unnecessary
copies
- **New `pd.col` syntax**: Initial support for `pd.col()` as a simplified syntax
for creating callables in `DataFrame.assign`

You can find the complete list of changes in our
[release notes](https://pandas.pydata.org/docs/dev/whatsnew/v3.0.0.html).

## Important changes requiring code updates

As a major release, pandas 3.0 includes some breaking changes that may require
updates to your code. The two most significant changes are:

### 1. Dedicated string data type by default

Starting with pandas 3.0, string columns are automatically inferred as `str`
dtype instead of the numpy `object` (which can store any Python object).

**Example:**
```python
# Old behavior (pandas < 3.0)
>>> ser = pd.Series(["a", "b"])
>>> ser
0 a
1 b
dtype: object # <-- numpy object dtype

# New behavior (pandas 3.0)
>>> ser = pd.Series(["a", "b"])
>>> ser.dtype
>>> ser
0 a
1 b
dtype: str # <-- new string dtype
```

This change improves performance and type safety, but may require code updates,
especially for library code that currently looks for "object" dtype when
expecting string data.

For more details, see the
[migration guide for the new string data type](https://pandas.pydata.org/docs/dev/user_guide/migration-3-strings.html).

### 2. Consistent copy/view behaviour with Copy-on-Write (CoW)

Copy-on-Write is now the default and only mode in pandas 3.0. This makes
behavior more consistent and predictable, but requires updates to certain coding
patterns.

The most impactfull change is that **chained assignment will no longer work**.
As a result, the `SettingWithCopyWarning` is also removed (since there is no
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: May be nice to mention that defensive copy()s to silence this warning in the past may not be needed anymore

longer ambiguity whether it would work or not).

**Example:**
```python
# Old behavior (pandas < 3.0) - chained assignment
df["foo"][df["bar"] > 5] = # This might modify df (unpredictable)

# New behavior (pandas 3.0) - must do the modification in one step (e.g. with .loc)
df.loc[df["bar"] > 5, "foo"] = 100
```

In general, any result of an indexing operation or method now always behaves as
if it were a copy, so modifications of the result won't affect the original
DataFrame.

For more details, see the
[Copy-on-Write migration guide](https://pandas.pydata.org/docs/dev/user_guide/copy_on_write.html#migrating-to-copy-on-write).


## Call to Action: test the Release Candidate

We need your help to ensure a smooth pandas 3.0 release!

Especially if you have pandas code in production or maintain a library with
pandas as a dependency, it is strongly recommended to run your test suites with
the release candidate, and report any issue to our issue tracker before the
official 3.0.0 release.

How can you best test the release candidate?

1. **First update to the latest released pandas 2.3** (if you are not already
running that version) and test it with your codebase. It is recommended to
resolve any deprecation warning before upgrading to pandas 3.0.
Comment on lines +103 to +105
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could also have setting infer_string and copy_on_write to True as steps 2 or 2/3, but don't feel strongly.

2. **Install the release candidate** and test it with your codebase
3. **Run your existing code** to identify any issues or needed updates
4. **Report any problems** you encounter on our [GitHub repository issue tracker](https://github.com/pandas-dev/pandas/issues)

The more testing we get now, the smoother the final pandas 3.0 release will be
for everyone. Your feedback is crucial for making this a successful release!

### Getting the Release Candidate

You can install the pandas 3.0 release candidate from PyPI:

```bash
python -m pip install --upgrade pandas==3.0.0rc0
```

Or from conda-forge using conda/mamba:

```bash
conda install -c conda-forge/label/pandas_rc pandas==3.0.0rc0
```
2 changes: 1 addition & 1 deletion web/pandas/index.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% extends "layout.html" %}
{% block body %}
{% block body_container %}
<div class="container">
<div class="row">
<div class="col-md-9">
Expand Down
7 changes: 7 additions & 0 deletions web/pandas/static/css/pandas.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ h1 {
font-size: 2.4rem;
font-weight: 700;
color: #130654;
margin: 2.4rem 0 2.4rem;
}
h2 {
font-size: 1.8rem;
Expand Down Expand Up @@ -136,6 +137,12 @@ h2:hover a.headerlink, h3:hover a.headerlink {
transition: opacity 0.5s;
}

@media (min-width: 992px) {
.container-main {
max-width: 960px;
}
}


/** Copied from the pydata-sphinx-theme **/
div.admonition, .admonition {
Expand Down
Loading