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を有効活用して使いこなすことができるでしょう。

今回は以上です。