やましなぶろぐ

Pandasのメソッドチェーンで列名を変更する.set_axis

メソッドチェーンで列名を変更する方法がすぐにわからずに調べたので共有します

🕒 Last mod: 2020-12-24


1. メソッドチェーンで列名を変更したい

メソッドチェーンは便利で可読性が高い。

できるだけすべての処理をメソッドチェーンだけで完結したい。

でもコーディングしていると「どうやってメソッドチェーンでコーディングできるかな?」という状況に陥ります。

DataFrameの列名の変更もこの状況の一つ。

メソッドチェーンで列名を変更する方法を調べたので共有します。

2. メソッドチェーンとは?

メソッドチェーンは '.' (dot) でいくつかの処理を連結して書いていきます。

例えばこのようなコードです。

(
  df
  .head()
  .describe()
)

DataFrameに対してhead()で最初の5行を選択して、この5行に対してdescribe()で統計量を確認しています。

3. DataFrameの列名の変更

一般的にDataFrameの列名を変更する場合にはこのようになります。

import pandas as pd
from sklearn import datasets

boston = datasets.load_boston()
boston_df = pd.DataFrame(
    boston.data,
    columns=boston.feature_names,
)
new_columns = [
    'new_' + s
    for s
    in boston_df.columns
]
boston_df.columns = new_columns

データはbostonを使用しました。

元々の列名のprefixに’new_'を追加して列名を変更します。

下記で列名の変更しています。

boston_df.columns = new_columns

でもこのコードではメソッドを使用していないのでメソッドチェーンで使用できません。

列名を変更できるメソッドは

.set_axis

です。

4. set_axis

「.set_axis」を使用して列名をメソッドチェーンで変更できます。

import pandas as pd
from sklearn import datasets

boston = datasets.load_boston()
boston_df = pd.DataFrame(
    boston.data,
    columns=boston.feature_names,
)
new_columns = [
    'new_' + s
    for s
    in boston_df.columns
]


(
    boston_df
    .set_axis(
        new_columns,
        axis=1,
        inplace=True,
    )
)

今回はset_axisを紹介するために新変数名(new_columns)を事前に処理しておきました。

本当であればnew_columnsを作成する処理もメソッドチェーンの中に取り込みたいところです。

このような処理については別途記事で紹介する予定です。

5. まとめ

地味な内容になってしまいましたが、列名を変更したい場面は多く.set_axisは多くの場面で活用できるでしょう。

メソッドチェーンにこだわらなければ別の方法でも対応可能なので.set_axisについて調べてたどり着くこともなかったでしょう。

私は今後.set_axisを有効活用して使いこなすことができるでしょう。

今回は以上です。