べくとりうむ.py Written by TicTak(※現在ブログ工事中のため、見づらい点があり申し訳ないです)

【Python Coding】pandasのshiftを用いてデータをずらす方法

code python

こんにちは、ちくたっく(@tictak_py)です。

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

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

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

簡単な例を用いて紹介しているので、難しく感じることはないはずです。

こんな方に読んで欲しい記事です

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

いつも通りのステップでコード内容を紹介していきます。

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

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

今回は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日」分だけすらすことが可能となります。

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

さいごに

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

冒頭でお伝えした通り、最初は知らなくても支障ないような方法ですが、時系列データを自由に扱いたい場合やモデル精度を上げたい場合には使える方法となるので、頭の片隅にでも入れておいてください。

ではでは。