DataFrame や Series でインデックスやカラムを書き換えるのは簡単です。普通に
1 2 |
df.index = ['aa', 'bb', 'cc'] df.columns = ['xx', 'yy', 'zz'] |
と代入すればおしまいです。
でも、これだとインデックスやカラムをまるまる指定する必要があるので場合によてっは面倒です。一部だけ変更したい、あるいは、変更パターンを指定したい場合はrenameメソッドを使います。
一部だけ変更
こんなデータがあるとして
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from pandas import DataFrame # # 東京、大阪、千葉の面積と人口 # df=DataFrame([[2190,13378],[1904,8850],[5157,6197]], columns=['area','population'], index=['Tokyooo','Osaka','Chibaaa']) #--------------------------- # area population # Tokyooo 2190 13378 # Osaka 1904 8850 # Chibaaa 5157 6197 #--------------------------- |
変更したいインデックス、またはカラムを辞書で指定します。
インデックス
Tokyooo、Chibaaa のスペルが間違ってるので直したい。
1 2 3 4 5 6 7 8 |
df.rename(index = {'Tokyooo':'Tokyo', 'Chibaaa':'Chiba'}) #--------------------------- # area population # Tokyo 2190 13378 # Osaka 1904 8850 # Chiba 5157 6197 #--------------------------- ↑ Tokyo、Chiba に修正 |
カラム
population は長すぎるので、pop にしたい。
1 2 3 4 5 6 7 |
df.rename(columns = {'population':'pop'}) #--------------------------- # area pop ← pop に修正 # Tokyooo 2190 13378 # Osaka 1904 8850 # Chibaaa 5157 6197 #--------------------------- |
変更パターンを指定
規則的なパターンで変更したければ、引数として関数を渡します。
大文字、小文字に
str.upper・str.lower を渡すと、大文字・小文字に変換されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# # カラムを大文字にしたい # df.rename(columns = str.upper) #--------------------------- # AREA POPULATION ← 大文字に # Tokyooo 2190 13378 # Osaka 1904 8850 # Chibaaa 5157 6197 #--------------------------- # # インデックスを小文字にしたい # df.rename(index = str.lower) #--------------------------- # area population # tokyooo 2190 13378 # osaka 1904 8850 # chibaaa 5157 6197 #--------------------------- ↑ 小文字に |
ラムダ式で書きかえ
ラムダ式を渡すこともできます。
1 2 3 4 5 6 7 8 |
df.rename(index = lambda x: x + ' ?') #--------------------------- # area population # Tokyooo ? 2190 13378 # Osaka ? 1904 8850 # Chibaaa ? 5157 6197 #--------------------------- ↑ ? がついた |
inplace オプション
inplace=True の指定ででオブジェクトそのものが書きかえられます。
1 2 3 4 5 6 7 8 9 |
df.rename(columns = {'population':'pop'}, inplace=True) print df #----------------------- # area pop # Tokyooo 2190 13378 # Osaka 1904 8850 # Chibaaa 5157 6197 #----------------------- |