pandas DataFrameの行名・列名の変更

DataFrame.rename()

DataFrame.rename()を使うと任意の行名・列名を変更できる。

まず、元となるDataFrameを作成。

pandas_dataframe_rename.pylink
1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
df = pd.DataFrame({'A': [11, 21, 31],
'B': [12, 22, 32],
'C': [13, 23, 33]},
index=['ONE', 'TWO', 'THREE'])
print(df)
# A B C
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33

DataFrame.rename()の引数columnsindexに辞書型で元の値と新しい値を指定する。

pandas_dataframe_rename.pylink
14
15
16
17
18
19
20
21
22
23
24
25
26
df_new = df.rename(columns={'A': 'a'}, index={'ONE': 'one'})
print(df)
# A B C
# ONE 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df_new)
# a B C
# one 11 12 13
# TWO 21 22 23
# THREE 31 32 33

デフォルトでは元のDataFrameは変更されず、新しいDataFrameが返される。

引数inplaceTrueにすると、元のDataFrameが変更される。新しいDataFrameは返されず、返り値はNone

pandas_dataframe_rename.pylink
28
29
30
31
32
33
34
35
36
37
df_new = df.rename(columns={'A': 'a'}, index={'ONE': 'one'}, inplace=True)
print(df)
# a B C
# one 11 12 13
# TWO 21 22 23
# THREE 31 32 33
print(df_new)
# None

ラムダ式で一括処理することもできる。

大文字にしたり、小文字にしたり。

pandas_dataframe_rename.pylink
39
40
41
42
43
44
45
df_new = df.rename(columns=lambda s: s.upper(), index=lambda s: s.lower())
print(df_new)
# A B C
# one 11 12 13
# two 21 22 23
# three 31 32 33

繰り返したり、末尾に追加したり。

pandas_dataframe_rename.pylink
47
48
49
50
51
52
53
df_new = df_new.rename(columns=lambda s: s*3, index=lambda s: s + '!!')
print(df_new)
# AAA BBB CCC
# one!! 11 12 13
# two!! 21 22 23
# three!! 31 32 33

DataFrame.indexとDataFrame.columns

行名・列名を全部新しい値にするのであれば、DataFrame.rename()よりも、DataFrame.indexDataFrame.columnsを再指定するほうが簡単。

pandas_dataframe_rename.pylink
55
56
57
58
59
60
61
62
df.index = [1, 2, 3]
df.columns = ['a', 'b', 'c']
print(df)
# a b c
# 1 11 12 13
# 2 21 22 23
# 3 31 32 33

このとき、リストのサイズが異なっているとエラーになるので注意。

スポンサーリンク

関連記事