Python WebAcademy Blog

pandas 3.1の候補版が公開。inplace=Trueが非推奨に、selectやread_csvの高速化も入ったニュースを初心者向けに解説

|

データ分析ライブラリpandasの3.1.0の候補版rc0が、2026年9月30日に公開されました。入門記事でよく見かけるinplace=Trueの多くが非推奨になり、列を選ぶselectや条件で絞り込むfilterの新しい使い方、read_csvの高速化も入っています。候補版を実際に動かした結果とともに、今のうちに直しておきたい書き方を整理します。

2026年9月30日、Pythonのデータ分析ライブラリpandasの3.1.0の候補版、3.1.0rc0が公開されました。候補版は、正式版の前に最終確認をしてもらうための版です。

今回の変更で、学習者にいちばん関係が深いのがinplace=Trueの扱いです。入門記事や書籍でよく見かけるdf.reset_index(inplace=True)のような書き方の多くが、非推奨になります。

非推奨とは、今は動くけれど将来なくなる予定の機能のことです。今回は、候補版を実際に動かしながら、何が変わるのかを見ていきます。

まずは何が変わるのかを整理しよう

最初に、今回取り上げる変更を表にまとめます。内容は、pandasの公式リポジトリにあるWhat's new in 3.1.0という文書にもとづいています。

変更 中身 影響を受けやすい人
inplaceの非推奨化 実際にはその場で書き換えていないメソッドのinplaceを非推奨に 入門記事の書き方をそのまま使っている人
DataFrame.select 列を選んで、新しい列もその場で計算できる 列の選択と追加をよく書く人
filterの新しい使い方 条件で行を絞り込めるようになった メソッドチェーンで書きたい人
read_csvの高速化 大きなファイルを複数のCPUで並列に読む 大きなCSVを扱う人
必要なバージョンの引き上げ NumPy 2.0.2以上などが必要に 古い環境を使っている人

PyPIの記録によると、3.1.0rc0が必要とするPythonは3.11以上です。正式版の公開日は、この文書の時点ではまだ決まっていません。

What's newによると、必須の依存ライブラリの最低バージョンも上がり、NumPyは2.0.2以上、python-dateutilは2.9.0以上が必要になりました。古い仮想環境をそのまま使い回している方は、pandasだけでなく周りのライブラリのバージョンも確かめるようにしましょう。

なお、普通にpip install pandasと打った場合は、候補版ではなく正式版の3.0系が入ります。候補版は、試したい人だけが明示的に選んで入れるものです。

pandasそのものがまだよくわからない方は、先にこちらを読んでおくと話がつながります。【関連記事】pandasとは?

inplace=Trueの多くが非推奨に

What's newによると、inplaceが非推奨になるのは、実際にはその場で書き換えていないメソッドです。対象として、次のメソッドが挙げられています。

種類 メソッド
行や列の削除 drop、dropna、drop_duplicates
名前の変更 rename、rename_axis
インデックスの操作 reset_index、set_index
並べ替え sort_values、sort_index
式の評価 eval、query

どれも、データの前処理でよく使うものばかりですよね。入門書でinplace=Trueを覚えた方は、少なからず驚いたのではないでしょうか。

なぜ非推奨になったのか

What's newの説明によると、これらのメソッドのinplaceは、実質的には結果を元の変数に代入し直しているだけでした。データそのものを直接書き換えているわけではなかったのです。

さらに、pandas 3.0で導入されたCopy-on-Writeという仕組みにより、データのコピーを避けるためにinplaceを使う必要もなくなりました。こうした理由から、紛らわしいinplaceを整理することになったと説明されています。

書き換え方はとても簡単

直し方は、結果を変数に代入し直すだけです。What's newの例を、そのまま紹介します。

# これまでの書き方(非推奨)
df.reset_index(inplace=True)

# これからの書き方
df = df.reset_index()

What's newには、代入し直す書き方でも効率は落ちないと明記されています。もともと内部で同じことをしていたからです。

なお、fillnaやreplaceのように、実際に値をその場で書き換えられるメソッドは、inplaceが残ります。すべてのinplaceがなくなるわけではない点に注意してください。

実際に候補版で動かしてみた

では、3.1.0rc0を新しい仮想環境に入れて、新しい機能と非推奨の警告を試してみましょう。候補版は、pip install pandas==3.1.0rc0のようにバージョンを指定すると入れられます。

import warnings

import pandas as pd

warnings.simplefilter("always")
print(pd.__version__)

df = pd.DataFrame(
    {"name": ["佐藤", "鈴木", "高橋"], "age": [61, 22, 35]}
)

# 新しいselect
print(df.select("name", age_months=pd.col("age") * 12))

# 条件で行を絞り込むfilter
print(df.filter(pd.col("age") > 30))

# inplace=True は非推奨に
df.reset_index(inplace=True)

手元のPython 3.11で実行した結果です。警告のメッセージは、読みやすいように短く省略しています。

3.1.0rc0
  name  age_months
0   佐藤         732
1   鈴木         264
2   高橋         420
  name  age
0   佐藤   61
2   高橋   35
Pandas4Warning: The inplace keyword in DataFrame.reset_index is deprecated and will be removed in a future version. See PDEP-8 for more details: ...

1つ目の表では、名前の列と、年齢を12倍して計算した新しい列が並んでいます。2つ目の表では、30歳より上の行だけが残りました。

最後の警告が、inplaceの非推奨を知らせるものです。警告の名前がPandas4Warningになっていることから、将来のpandas 4で取り除かれる予定だと読み取れます。

警告の意味と、警告をエラーにして洗い出す方法は、こちらで詳しく解説しています。【関連記事】Pythonのwarningsとは?

列を選ぶselectと、行を絞るfilter

先ほどのコードで使った2つの新しい機能を、もう少し詳しく見ておきましょう。どちらも、pd.col("列名")という書き方と組み合わせて使えます。

DataFrame.select

selectは、指定した列だけを持つ新しいDataFrameを返します。キーワード引数で名前を付ければ、計算した結果を新しい列として一緒に作れます。

What's newによると、assignと同じように、同じ呼び出しの中で先に作った列を、後の引数から参照することもできます。列の選択と追加を1回でまとめて書けるので、コードがすっきりします。

filterで条件を指定する

これまでのfilterは、列や行のラベルの名前で選ぶためのメソッドでした。3.1では、condという引数で、条件に合う行を絞り込めるようになりました。

What's newには、ラベルで選ぶitems、like、regexの使い方は、将来非推奨になる予定だとも書かれています。filterの役割が、少しずつ条件での絞り込みへ移っていくのかもしれません。

こうしたpd.col()を使った書き方は、Polarsの式の書き方にも似ています。先日のPolars 2.0のニュースとあわせて読むと、違いが見えてきます。【関連記事】Polars 2.0がリリース

read_csvが速くなった

もう1つの大きな変更が、CSVの読み込みの高速化です。What's newによると、標準のCエンジンでの読み込みが大きく速くなりました。

1つのスレッドでの読み込みでも、3.0と比べて一般に2〜3倍速いと説明されています。さらに、5MB以上の圧縮されていないローカルファイルは、複数のCPUコアで並列に読まれるようになりました。

並列で読むスレッドの数は、新しいmode.max_threadsという設定で変えられます。既定では使えるCPUの数で、上限は6です。

What's newには、並列でも結果は1つずつ読んだ場合と同じだと書かれています。すでに並列処理をしているアプリの中で使う場合は、1にして順番に読ませることもできます。

CSVの基本的な扱い方は、こちらで紹介しています。【関連記事】PythonでCSVを扱う方法

そのほかの気になる変更

What's newには、ほかにも知っておきたい変更がいくつか並んでいます。初心者にも関係しそうな2つを紹介します。

タイムゾーン付きの日時の.valuesが非推奨に

タイムゾーン付きの日時が入った列で.valuesを使うと、これまではタイムゾーンの情報が落ちたNumPyの配列が返っていました。3.1では、この動きが非推奨になり、Pandas4Warningが出ます。

What's newによると、pandas 4.0では、.valuesがタイムゾーンの情報を保ったまま返すように変わる予定です。今のうちに、.arrayや.to_numpy()を使い分ける書き方に慣れておくと安心です。

Timedelta.total_seconds()がナノ秒まで数えるように

時間の長さを表すTimedeltaのtotal_seconds()が、ナノ秒の部分も含めて計算するようになりました。What's newによると、これまでは1マイクロ秒より細かい部分が黙って切り捨てられていました。

実際に候補版でpd.Timedelta(nanoseconds=1500).total_seconds()を実行すると、1.5e-06と表示されました。1500ナノ秒は1.5マイクロ秒なので、細かい部分まで正しく数えられています。

今のうちにやっておきたいこと

最後に、正式版に備えてやっておきたいことを整理します。候補版を入れなくても、今の書き方を見直すことはできます。

順番 やること
1 コードの中のinplace=Trueを探す
2 対象のメソッドなら、df = df.xxx()の形に書き換える
3 NumPyが2.0.2以上かを確かめる
4 余裕があれば、仮想環境で候補版を試す

私は10年ほどエンジニアとして開発に関わってきましたが、inplace=Trueを付けたメソッドの戻り値をうっかり変数に入れて、中身がNoneになって困ったことがあります。inplaceを付けると戻り値がNoneになるので、代入する書き方に統一しておくほうが間違いが起きにくいと感じます。

実際に候補版でresult = df.sort_values("a", inplace=True)と書いてresultを表示すると、Noneと出ました。代入する書き方なら、こうした取り違えはそもそも起きません。

候補版を試すときは、普段の環境とは分けた仮想環境に入れるのが基本です。もし不具合を見つけたら、正式版の前に報告することで、pandasをよくする手助けにもなります。

まとめ

pandas 3.1.0の候補版rc0が、2026年9月30日に公開されました。inplace=Trueの多くが非推奨になり、selectやfilterの新しい使い方、read_csvの高速化が入っています。

なかでもinplaceの非推奨は、多くの学習者のコードに関わる変更です。正式版を待たずに、今日から代入し直す書き方に慣れておきましょう。

ここまでお読みいただきありがとうございました。

参考情報

次のアクション

記事で学んだ内容を実際に動かしてみよう

Python WebAcademyでは、ブラウザ上でコードを書きながら基礎から実践まで体系的に学べます。

Python WebAcademyの学習画面

あわせて読む

関連記事

ブログ一覧へ

Python学習ロードマップ

まずはこの3講座から

記事で気になったテーマを、順番に手を動かしながら学べます。

ロードマップを見る