Technical Blog テクニカルブログ
  1. HOME
  2. テクニカルブログ
  3. Pythonライブラリ「Pandas」のバージョンアップの注意点について

Pythonライブラリ「Pandas」のバージョンアップの注意点について

投稿者:宮野

1.はじめに

こんにちは。NI+Cの宮野です。
本稿では数値計算、機械学習、Webアプリ開発等でよく用いられるプログラミング言語「Python」、そのなかでデータ解析で必須となるライブラリ「Pandas」のバージョン変更における注意点をご紹介します。

2.ライブラリバージョンアップが必要な理由

そもそもなぜライブラリのバージョンアップが必要なのでしょうか。それはPythonバージョンアップにより従来のバージョンのライブラリの互換性がなくなるためです。
Pythonは機能追加や脆弱性の修正等により年々バージョンアップします。Pythonをバージョンアップした際、古いバージョンのライブラリは互換性がなくなり、今まで使用できたコードが使用できなくなる場合があります。これがライブラリバージョンアップの理由として挙げられます。

今まで使用していたバージョンのPythonを使用すればライブラリのバージョンアップは必要ありませんが、古いバージョンのPythonはサポートがいずれ終了します。サポートが終了したバージョンについて脆弱性の修正がなくなるため、セキュリティリスクが高くなります。そのため古いバージョンのPythonを使い続けることは非推奨とされます。

またPythonを利用しているクラウドサービスは古いPythonのバージョンの提供を順次廃止していきます。例えば「AWS(Amazon Web Services)」では「Lambda」や「SageMaker」等の機能でPythonを利用します。これらのサービスは上記のサポート終了の観点から古いバージョンの提供が廃止されていきます。これにより新しいPythonのバージョンへの移行が必要になる場合があります。

このようにPythonのバージョンアップの必要性から互換性のあるライブラリにバージョンアップする必要があります。

3.バージョンアップの影響と対応例

Pandasのバージョンアップにより既存のコードが使用できなくなる場合があります。
バージョンアップによりコードが使用できなくなる例をご紹介します。

例1 :既存関数の廃止

pandasのバージョンを上げた際、既存の関数が廃止され使用できなくなる場合があります。
例として関数「append」が挙げられます。
pandasバージョン1.*では関数「append」を用いることでデータフレーム同士を縦結合することができました。しかしバージョン2.*以降では関数「append」でデータフレームを縦結合することができなくなりました。

例えば以下のようにpandasをインポートし、データフレーム「df1」、「df2」を作成したとします。

・pandasをインポートとデータフレーム「df1」、「df2」の作成

上記コードによりデータフレーム「df1」,「df2」は以下のように作成されます。

・データフレーム「df1」

・データフレーム「df2」

データフレーム「df1」,「df2」を用いて以下の関数「append」を用いたコードを実行すると、pandasがバージョン2.*以降の場合エラーが発生します。

・関数「append」によるデータフレームの縦結合の実行

・関数「append」を実行した際に表示されるエラーメッセージ

上記エラーは関数「append」が廃止されたことが原因で発生したエラーとなります。
※リストの縦結合では「append」を使用することができます。

解決策として関数「concat」を使用することでデータフレーム同士を縦結合することができます。
以下が関数「concat」を用いた縦結合のプログラムです。

・関数「concat」によるデータフレームの縦結合の実行

・実行結果(「df1」と「df2」が縦結合されたデータフレーム「df3」)

例2:フォーマットの詳細な指定の有無

pandasのバージョンを上げた際、フォーマットの指定方法について今まで類似するフォーマットであれば読み取れたものが読み取れなくなる場合があります。
pandasバージョン1.*では文字列形式「yyyy-mm-dd hh:mm:ss」のカラムを関数「to_datetime」で日付形式に変更しようとした際、formatを「%Y-%m-%dT%H:%M:%S」と指定しても日付形式に変更することができました。
しかしバージョン2.*以降では対象の文字列に対し、完全に一致した日付形式を指定しなければエラーが発生するようになりました。

例えば以下のように文字列形式「yyyy-mm-dd hh:mm:ss」のカラムをデータフレームを作成し、関数「to_datetime」で日付形式に変換し表示しようとすると以下のエラーが発生します。

・文字列形式「yyyy-mm-dd hh:mm:ss」を持つデータフレームの作成と日付変換・表示を行うコード

・実行時に発生したエラー

上記のエラーは指定したフォーマットとカラムに格納された文字列の形式が一致しないことでエラーが発生しています。
バージョン2.*以降で実行する場合、下記コードのように「%Y-%m-%d %H:%M:%S」と修正し日付と時刻の区切り部分を「T」から半角スペースに変更しフォーマットが完全一致するように変更することで実行することができます。

・フォーマット指定「%Y-%m-%d %H:%M:%S」に修正後のコード

・上記コード実行結果

上記の場合は「2024-05-06 12:55:55」という文字列が入力されているため
フォーマットを「%Y-%m-%d %H:%M:%S」と指定する必要があります。
しかし「2024-05-06T12:55:55」という文字列が入力された場合はフォーマットを「%Y-%m-%dT%H:%M:%S」と指定する必要があります。

例3:引数名変更

pandasのバージョン上げた際、既存の使用できる関数について、引数名が変更される場合があります。
例として関数to_csvで改行文字を設定する引数について、pandasバージョン1.4.*までは「lineter_minator」でしたがバージョン1.5.*以降は「lineterminator」と変更されています。

例えば以下のようにデータフレーム「df」を作成し,関数「to_csv」で改行コード「\r\n(CR+LF)」のcsvファイルを作成しようとしたとします。
pandasバージョン1.4.*までは改行コードを指定する引数名は「line_terminator」でしたが、pandasバージョン1.5.*以降は変数名が変更されたため、エラーが発生します。

・改行コード「\r\n(CR+LF)」のcsvファイルを出力するコード

・実行時に発生したエラー

上記のように「line_terminator」は予期しない引数と判別されエラーが発生します。
バージョン1.5.*以降で実行する場合、下記コードのように変数名を「lineterminator」と修正することで改行コード「\r\n(CR+LF)」のcsvファイルを作成することができます。

・修正後コード

・実行結果

4.最後に

今回、Pandasのバージョンアップにより使用できなくなるコード例をご紹介しました。
他のライブラリにおいてもバージョンアップによる仕様変更でこれまでのプログラムコードが利用できなくなる可能性があります。
そのためPythonやライブラリのバージョンアップ時には新しいバージョンでの影響調査・動作確認を行うことをお勧めいたします。

ページのトップへ