Skip to content

Commit dd791df

Browse files
WEB: add pandas 3.0 release candidate announcement blog (#63348)
1 parent ab9dbb5 commit dd791df

File tree

4 files changed

+141
-2
lines changed

4 files changed

+141
-2
lines changed

web/pandas/_templates/layout.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,11 @@
5656
</nav>
5757
</header>
5858
<main role="main">
59-
<div class="container">
59+
{% block body_container %}
60+
<div class="container container-main">
6061
{% block body %}{% endblock %}
6162
</div>
63+
{% endblock %}
6264
</main>
6365
<footer class="container pt-4 pt-md-5 border-top">
6466
<ul class="list-inline social-buttons float-end">
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
Title: pandas 3.0.0 release candidate ready for testing!
2+
Date: 2025-12-12
3+
4+
# pandas 3.0.0 release candidate ready for testing!
5+
6+
We're excited to announce the release candidate for pandas 3.0. This major
7+
release brings significant improvements to pandas, but also features some
8+
potentially breaking changes.
9+
10+
To ensure a smooth pandas 3.0 release, we can use your help to [test the
11+
release candidate now](#call-to-action-test-the-release-candidate).
12+
13+
## Highlights of pandas 3.0
14+
15+
pandas 3.0 introduces several major enhancements:
16+
17+
- **Dedicated string data type by default**: String columns are now inferred as
18+
the new `str` dtype instead of `object`, providing better performance and type
19+
safety
20+
- **Consistent copy/view behaviour with Copy-on-Write (CoW)** (a.k.a. getting
21+
rid of the SettingWithCopyWarning): More predictable and consistent behavior
22+
for all operations, with improved performance through avoiding unnecessary
23+
copies
24+
- **New `pd.col` syntax**: Initial support for `pd.col()` as a simplified syntax
25+
for creating callables in `DataFrame.assign`
26+
27+
Together with a lot of other improvements and bug fixes. You can find the
28+
complete list of changes in our
29+
[release notes](https://pandas.pydata.org/docs/dev/whatsnew/v3.0.0.html).
30+
31+
## Important changes requiring code updates
32+
33+
As a major release, pandas 3.0 includes some breaking changes that may require
34+
updates to your code. The two most significant changes are:
35+
36+
### 1. Dedicated string data type by default
37+
38+
Starting with pandas 3.0, string columns are automatically inferred as `str`
39+
dtype instead of the numpy `object` (which can store any Python object).
40+
41+
**Example:**
42+
```python
43+
# Old behavior (pandas < 3.0)
44+
>>> ser = pd.Series(["a", "b"])
45+
>>> ser
46+
0 a
47+
1 b
48+
dtype: object # <-- numpy object dtype
49+
50+
# New behavior (pandas 3.0)
51+
>>> ser = pd.Series(["a", "b"])
52+
>>> ser.dtype
53+
>>> ser
54+
0 a
55+
1 b
56+
dtype: str # <-- new string dtype
57+
```
58+
59+
This change improves performance and type safety, but may require code updates,
60+
especially for library code that currently looks for "object" dtype when
61+
expecting string data.
62+
63+
For more details, see the
64+
[migration guide for the new string data type](https://pandas.pydata.org/docs/dev/user_guide/migration-3-strings.html).
65+
66+
### 2. Consistent copy/view behaviour with Copy-on-Write (CoW)
67+
68+
Copy-on-Write is now the default and only mode in pandas 3.0. This makes
69+
behavior more consistent and predictable, but requires updates to certain coding
70+
patterns.
71+
72+
The most impactfull change is that **chained assignment will no longer work**.
73+
As a result, the `SettingWithCopyWarning` is also removed (since there is no
74+
longer ambiguity whether it would work or not), and defensive `.copy()` calls
75+
to silence the warning are no longer needed.
76+
77+
**Example:**
78+
```python
79+
# Old behavior (pandas < 3.0) - chained assignment
80+
df["foo"][df["bar"] > 5] = # This might modify df (unpredictable)
81+
82+
# New behavior (pandas 3.0) - must do the modification in one step (e.g. with .loc)
83+
df.loc[df["bar"] > 5, "foo"] = 100
84+
```
85+
86+
In general, any result of an indexing operation or method now always behaves as
87+
if it were a copy, so modifications of the result won't affect the original
88+
DataFrame.
89+
90+
For more details, see the
91+
[Copy-on-Write migration guide](https://pandas.pydata.org/docs/dev/user_guide/copy_on_write.html#migrating-to-copy-on-write).
92+
93+
94+
## Call to Action: test the Release Candidate
95+
96+
We need your help to ensure a smooth pandas 3.0 release!
97+
98+
Especially if you have pandas code in production or maintain a library with
99+
pandas as a dependency, it is strongly recommended to run your test suites with
100+
the release candidate, and report any issue to our issue tracker before the
101+
official 3.0.0 release.
102+
103+
How can you best test the release candidate?
104+
105+
1. **First update to the latest released pandas 2.3** (if you are not already
106+
running that version) and test it with your codebase. It is recommended to
107+
resolve any deprecation warning before upgrading to pandas 3.0.
108+
2. Optionally, you can already enable the new string dtype and Copy-on-Write
109+
mode using pandas 2.3 (`pd.options.future.infer_string = True` and
110+
`pd.options.mode.copy_on_write = True`).
111+
3. **Install the release candidate** (see below) and test it with your codebase
112+
4. **Run your existing code** to identify any issues or needed updates
113+
5. **Report any problems** you encounter on our [GitHub repository issue tracker](https://github.com/pandas-dev/pandas/issues)
114+
115+
The more testing we get now, the smoother the final pandas 3.0 release will be
116+
for everyone. Your feedback is crucial for making this a successful release!
117+
118+
### Getting the Release Candidate
119+
120+
You can install the pandas 3.0 release candidate from PyPI:
121+
122+
```bash
123+
python -m pip install --upgrade pandas==3.0.0rc0
124+
```
125+
126+
Or from conda-forge using conda/mamba:
127+
128+
```bash
129+
conda install -c conda-forge/label/pandas_rc pandas==3.0.0rc0
130+
```

web/pandas/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% extends "layout.html" %}
2-
{% block body %}
2+
{% block body_container %}
33
<div class="container">
44
<div class="row">
55
<div class="col-md-9">

web/pandas/static/css/pandas.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ h1 {
99
font-size: 2.4rem;
1010
font-weight: 700;
1111
color: #130654;
12+
margin: 2.4rem 0 2.4rem;
1213
}
1314
h2 {
1415
font-size: 1.8rem;
@@ -136,6 +137,12 @@ h2:hover a.headerlink, h3:hover a.headerlink {
136137
transition: opacity 0.5s;
137138
}
138139

140+
@media (min-width: 992px) {
141+
.container-main {
142+
max-width: 960px;
143+
}
144+
}
145+
139146

140147
/** Copied from the pydata-sphinx-theme **/
141148
div.admonition, .admonition {

0 commit comments

Comments
 (0)