たなブログ 教養を高めて生涯資産を増やすブログ(`・ω・´)

【Python Coding】pandas “shift” を使ってデータをずらす方法について解説します

PR Pythonを学ぶ

こんにちは、たなです。

今回は、pythonのpandasにある”shift“を使ってデータフレームの値を「ずらす」方法を紹介したいと思います。

「データをずらして分析したい」という場面(特に時系列データの分析)で使える手法となりますが、どちらかというと中上級者向けの分析方法かなと思います。

ただ、初心者の方であったとしても、「こういう方法もあるんだ」と今のうちにインプットしておけば、後々役に立つ時が来るので参考にしてみてください。

本記事では簡単な例を用いて紹介していきます。

本記事の内容

  • pandasの「shift」の使い方を知りたい方
  • データフレームの値を自由にずらしてデータ分析の幅を広げたい方

僕のブログでは【完全ガイド】pythonの学習サイトをレベル別に紹介!【基礎から機械学習・人工知能までのロードマップ】という記事も公開しています。より高みを目指したい人は参考にしてみてください。

pythonの学習ロードマップへ

pandas “shift” を使ってデータをずらす方法を解説

必要ライブラリのインポート

import pandas as pd

今回はpandasだけ使うので、これだけインポートしておきます。

利用データの作成

今回はシンプルな例を作成して、shiftを用いた効果をイメージしやすいように「10行3列」のデータフレームを以下のように作っておきます。値自体は自由に変更してもらって構いません。

今回使うDataFrameの作成

このデータフレームを用いて、「shift」の使い方を確認していきます。
「shift」の効果を一言で言うと、データを行方向(もしくは列方向)に移動させる(ずらす)ことが出来ます。

shiftの使い方①|periods

色々と引数を設定することは出来ますが、まずは何も指定せずそのまま使ってみます。

pandasのshiftを使った結果|デフォルト利用

すると、一番最初の行がすべて欠損値(Nan)となっていますが、これはデータ全体が1行ずつズレていることを意味します。なぜ「1行」ズレているのかと言うと、デフォルトで「periods」という引数が「1」に設定されているためです。

試しに、「periods」を「3」に設定してみましょう。

pandasのshiftを使った結果|periods=3に設定

すると今度は、すべてのデータが行方向に3行ずつズレていることがわかるかと思います。
このように、`df.shift()`がデータをずらすための基本的な使い方となります。

shiftの使い方②|axis

では次に、行方向ではなく「列方向」にデータをすらす方法を見ていきます。
これは、引数「axis」に「1」もしくは「columns」を設定すればOKです。

pandasのshiftを使った結果|axis=1に設定

すると、カラム名「col1」がすべて欠損値(NaN)となり、データが列方向にずれているのがわかりますね。
「periods」は指定していないので、デフォルト設定で「1列」だけずれていることになります。

shiftの使い方③|fill_value

続いて、データをずらした後の欠損値「NaN」を何かしらの値や文字列で埋めたい場合に使える方法です。
このような時は、引数「fill_value」に値を設定すればOKです。

pandasのshiftを使った結果|fill_valueに値を設定

上記は「3行」ずらした結果ですが、欠損値部分が「999」となっているのがわかりますね。
今回は数値を用いましたが、文字列を指定しても欠損値を置換することは可能なので、試してみてください。

shiftの使い方④|freq

最後に、時系列データを扱うような場合に使える方法を紹介しておきたいと思います。
DataFrame型よりもSeries型の方がイメージ湧きやすいので、新しく別データを作成しておきます。

pandasの「shift」はDataFrameに対してもSeriesに対しても適用可能です。

Indexに時系列データを持つSeriesデータを作成

このデータ自体に特に意味は持たせていませんが、各月末時点における何かしらのデータ(預金残高や在庫金額など)を表しているとイメージしてもらえればOKです。

このデータを「shift」させていきますが、shiftさせる対象は「時間を表しているIndex部分」となります。
以下のコードは「月末起算して3日シフトさせた結果」「1ヶ月シフトさせた結果」を示しています。

Seriesデータの「日付部分」をshiftさせた結果

上記図の赤枠部分を見て頂ければわかる通り、それぞれ日付がシフトしていますね。
コード内の「3D」を「xxD」とすることで、「xx日」分だけすらすことが可能となります。

時系列データを扱う場合には使える方法なので、データ分析時には参考にしてみてください。

まとめ:pandas “shift”を使えば時系列データ分析に役立てることが出来る!

今回はpythonのpandasを用いてデータフレームの値をずらす方法を紹介してきました。

時系列データを自由に扱いたい場合やモデル精度を上げたい場合には使える方法となります。Kaggleやデータ分析の現場にいる人はぜひ活用してみてください。

冒頭でも紹介しましたが、pythonの学習方法を【完全ガイド】pythonの学習サイトをレベル別に紹介!【基礎から機械学習・人工知能までのロードマップ】でまとめています。良ければあわせて読んでみてください。

すてきなpythonライフを。