今回の内容
二つのDataFrame型のデータそれぞれに設定されている日時カラムをもとにマージしたかったのですが、
マージをするためにデータを加工する段階でカラム名が変更できず詰まってしまったので備忘メモとして残したいと思います。
結論
今回の原因を先に記載しますと、DataFrame型のpandas.Indexはimmutableなのでインデックスとして設定しているカラム名をrenameで変更しようとしてもできません。
そのため、インデックスに設定しているカラムを変更する場合は一度インデックスを削除する必要がありました。
動作環境
・Google Colaboratory
使用言語&バージョン
・Python 3.7.13
・numpy 1.21.5
・pandas 1.3.5
・matplotlib 3.2.2など
使用データ
こちらの気象庁の過去の気象データ・ダウンロードのページから2021年の横浜の平均気温のcsvファイルをダウンロードしGoogle Driveにアップロードして使用しました。
検証
# 2021年の平均気温データファイルの取得
drive_file.GetContentFile("横浜の平均気温.csv")
average_temperature = pd.read_csv('横浜の平均気温.csv', encoding="shift-jis", header=1)
print(average_temperature.head())
#実行結果
DATE 平均気温(℃)
0 NaN NaN
1 2021/1/1 6.0
2 2021/1/2 6.5
3 2021/1/3 5.0
4 2021/1/4 6.7
average_temperature.dropna(inplace=True)
print(average_temperature.head())
# 試しにDATEをindexに設定する
a_temp = average_temperature.set_index("DATE")
print(a_temp)
#実行結果
平均気温(℃)
DATE
2021/1/1 6.0
2021/1/2 6.5
2021/1/3 5.0
2021/1/4 6.7
2021/1/5 6.9
... ...
2021/12/27 3.6
2021/12/28 4.5
2021/12/29 5.8
2021/12/30 7.9
2021/12/31 3.6
[365 rows x 1 columns]
# renameを実行
a_temp.rename(columns={"DATE": "年月日"},
inplace=True)
print(a_temp)
#実行結果
平均気温(℃)
DATE
2021/1/1 6.0
2021/1/2 6.5
2021/1/3 5.0
2021/1/4 6.7
2021/1/5 6.9
... ...
2021/12/27 3.6
2021/12/28 4.5
2021/12/29 5.8
2021/12/30 7.9
2021/12/31 3.6
[365 rows x 1 columns]
カラム名が変更できていない
やってみたこと
コピーしてからリネームする
→コピーしたはずがNULLになってしまう
解決方法
一旦インデックスを削除してから変更する
# 一度インデックスをリセットしてからrenameする
a_temp =average_temperature.reset_index(drop=True)
a_temp.rename(columns={"DATE": "年月日"},
inplace=True)
print(a_temp)
# 実行結果
年月日 平均気温(℃)
0 2021/1/1 6.0
1 2021/1/2 6.5
2 2021/1/3 5.0
3 2021/1/4 6.7
4 2021/1/5 6.9
.. ... ...
360 2021/12/27 3.6
361 2021/12/28 4.5
362 2021/12/29 5.8
363 2021/12/30 7.9
364 2021/12/31 3.6
[365 rows x 2 columns]
無事カラム名の変更ができました。
もしかしてインデックスが設定されている場合変更できないのではと思い公式ドキュメントを調べてみたところ、しっかりimmutableだと記載されていました。
「Immutable sequence used for indexing and alignment. The basic object storing axis labels for all pandas objects.」
やっぱり公式ドキュメントを読むことは大事ですね。