2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DataFrame型のデータのカラム名が変更できない場合に確認したいこと

Last updated at Posted at 2022-04-10

今回の内容

二つの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.」

やっぱり公式ドキュメントを読むことは大事ですね。

参考

Pandas DataFrame インデックスを削除
公式ドキュメント

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?