「名前のないインデックスを列に」変換する

前問では、reset_index()で「名前のあるインデックスを列に」変換しました。
しかし、インデックスには名前がついていないこともあります。

次問では、「名前のないインデックスを列に」変換する方法を学びます。
「名前のないインデックスを列から変換された列」の列名はindexになります。このままでは、分析などでわかりにくいです。そのため、列名を別の名前に変えた方が良いでしょう。これ以外にも、データ処理をしていると、列名を変えて扱いやすくしたい場面が多々あります。

列名を変えるには、下記のようにします。

df.rename(columns={古い列名: 新しい列名})

このメソッドは、列名を変更した新しいDataFrameを返します。

※ set_index()reset_index()同様、rename()でも引数inplaceが使えます。inplace=Trueを指定するとDataFrameそのものを変更し、指定しないと元のDataFrameは変更せず新しいDataFrameを取得します。

演習

import pandas as pd

df = pd.DataFrame(
    [
        ["10/01", "A001", 20],
        ["10/04", "B010", 11],
        ["10/05", "A005", 8],
    ],
    columns=["Some", "Prod", "Sale"]
)
df
SomeProdSale
010/01A00120
110/04B01011
210/05A0058

“Some”という列名を”Date”に変えます。

df = df.rename(columns={"Some": "Date"})
df
DateProdSale
010/01A00120
110/04B01011
210/05A0058
  • 列名を変更したDataFrameは、df.rename(columns={古い列名: 新しい列名})で取得できます。
  • inplace=Trueを指定すると、dfそのものを変更します。

rename(index=...)を使うと、行名の変更もできます。
たとえば、下記のようにすると、2行目の行名を1から100に変更した新しいDataFrameを返します。

df.rename(index={1: 100})
indexProdSale
010/01A00120
10010/04B01011
210/05A0058

コメント

タイトルとURLをコピーしました