pandasで行名・列名を変更する方法4選|違いや使い方を具体例を使って紹介

pandasで行名・列名を変更する方法4選

pandasを使ってデータを整理しているとき、列名を変更したいときありますよね。

この記事ではpandasで列名を変更する方法を紹介します。

目次

pandasで行名・列名を変更する4つの方法

pandasで行名・列名を変更する4つの方法

pandasで行・列名を変更する方法に次のようなものがあります。

  • 任意の行・列名に変更する: rename
  • 列名の前後に文字列を追加: add_prefix, add_suffix
  • 行・列名を一括変更する: set_axis
  • 元の行・列名を一括変更する: columns, index

renameが使いやすく汎用性があるのでおすすめです。

この記事に載せているコードは全てグーグルコラボラトリーで記述・動作を確認しています。

紹介に入る前に、pandasのインポートや使用するDataFrameを用意します。

import pandas as pd
point_list = [[51, 70, 35],
              [21, 0, 55],
              [14, 74, 23],
              ]
point_data = pd.DataFrame(data=point_list, columns=['国語', '数学', '英語'], index=['A', 'B', 'C'])

point_data

出力:

index地理日本史世界史
1組517035
2組21055
3組147423

任意の行・列名に変更する: rename

任意の行・列名に変更する: rename

renameは指定した行や列の名前を任意の名に変更できます。

名前を変更したい行や列を指定できるため、使い勝手の良い方法です。

pandas.DataFrame.rename(columns={‘変更したい列名’: ‘C変更後の列名’})で列名の変更が可能です。

変更後のDataFrameは保存されないので、新しく変数をつけて格納しましょう。

point_dataの列名「国語」を「japanese」に変更してみます。

rename_jap = point_data.rename(columns={'国語':'japanese'})
rename_jap

出力:

indexjapanese数学英語
A517035
B21055
C147423

列名を変更したい場合は、pandas.DataFrame.rename(index={‘変更したい列名’: ‘変更後の列名’})と記述します。

また、一度に複数の行・列名を変更できます。

行名「A」「B」「C」を「X」「Y」「Z」に変更してみましょう。

rename_XYZ = point_data.rename(index={'A':'X', 'B':'Y', 'C':'Z'})
rename_XYZ

出力:

index国語数学英語
X517035
Y21055
Z147423

行名と列名を同時に変更も可能です。

行名を「D」「E」「F」、列名を「jap」「math」「eng」に変更します。

rename_all = point_data.rename(index={'A':'D', 'B':'E', 'C':'F'}, columns={'国語':'jap', '数学':'math', '英語':'eng'})
rename_all

出力:

indexjapmatheng
D517035
E21055
F147423

列名の前後に文字列を追加: add_prefix, add_suffix

列名の前後に文字列を追加: add_prefix, add_suffix

add_prefix、add_suffixは列名の前後に文字列を追加する関数です。

この変更は全ての列名に反映されます。

列名の前に「期末_」を追加してみましょう。

pre_期末 = point_data.add_prefix('期末テスト_')
pre_期末

出力:

index期末テスト_国語期末テスト_数学期末テスト_英語
A517035
B21055
C147423

今度は列名の後ろに「_追試」を追加します。

suf_追試 = point_data.add_suffix('追試')
suf_追試

出力:

index国語追試数学追試英語追試
A517035
B21055
C147423

add_prefixとadd_suffixはDataFrameの場合、列名にのみ変更できます。

行名を一括で変更したい場合はrenameを使用します。

カッコ内にlambda関数で列名の前に文字列をたす関数を記述します。

行名の前に「1組_」を追加しましょう。

pre_1組 = point_data.rename(index=lambda n: '1組_' + n)
pre_1組

出力:

index国語数学英語
1組_A517035
1組_B21055
1組_C147423

同じ方法で行名の後ろに「_さん」を足してみます。

add_さん = point_data.rename(index=lambda n: n + 'さん')
add_さん

出力:

index国語数学英語
Aさん517035
Bさん21055
Cさん147423

行・列名を一括変更する: set_axis

行・列名を一括変更する: set_axis

set_axisを使用することで行・列名を一括変更できます。

renameでも一括変更は可能ですが、set_axisの利点は変更したい行・列名を毎回指定する手間がないことです。

記述方法はpandas.DataFrame.set_axis([変更後の行・列名のリスト], axix=行・列の指定)です。

引数axisに0 または ‘index’と指定することで行名、1 または ‘columns’の記述で列名にリストを反映します。

この際、リストの個数と行・列の数が違うとエラーになるので注意してください。

行名を「S」「T」「U」に変更します。

set_stu = point_data.set_axis(['S', 'T', 'U'], axis=0)
set_stu

出力:

index国語数学英語
S517035
T21055
U147423

今度は列名を「音楽」「美術」「体育」に変更します。

set_col = point_data.set_axis(['音楽', '体育', '美術'], axis='columns')
set_col

出力:

index音楽体育美術
A517035
B21055
C147423

元の行・列名を一括変更する: columns, index

元の行・列名を一括変更する: columns, index

行・列名を一括変更する方法として、columns,indexを更新する方法があります。

pandas.DataFrame.columns = [変更後の列名のリスト]のように記述します。

元のDataFrame更新される点に注意してください。

列名をcolumnsで「地理」「日本史」「世界史」に変更してみます。

point_data.columns = ['地理', '日本史', '世界史']
point_data

出力:

index地理日本史世界史
1組517035
2組21055
3組147423

最初に用意したDataFrameである、point_dataが更新されていることが分かります。

同様にindexで行名を「1組」「2組」「3組」と変更して、確認してみましょう。

point_data.index = ['1組', '2組', '3組']
point_data

出力:

index地理日本史世界史
1組517035
2組21055
3組147423

pandas.Seriesで行名を変更する

pandas.Seriesで行名を変更する

これまでpandas.DataFrameでの行・列名の変更方法について紹介してきましたが、これらの方法はpandas.Seriesでも使用可能です。

使い方は基本的にpandas.DataFrameと同じです。

最初にseriseを用意します。

point_serise = pd.Series([51, 70, 35], name='J')
point_serise

出力:

0 51
1 70
2 35
Name: J, dtype: int64

rename

renameで行名(インデックス名)の変更が可能です。

行名「0」「1」「2」を「A」「B」「C」へ変更します。

rename_rerise = point_serise.rename({0:'A', 1:'B', 2:'C'})
rename_rerise

出力:

A 51
B 70
C 35
Name: J, dtype: int64

Serise.renameでは、列名を変更する代わりにSeriseの名前が変更できます。

現在seriseの名前が「J」なので、これを「japanese」に変更します。

print(point_serise.name)
jap_sr = point_serise.rename('japanese')
print(jap_sr.name)

出力:

J
japanese

add_prefix, add_suffix

add_prefix, add_suffixは、DataFrameでは列名の前後に文字列を追加していました。Seriseでは行名前後に文字列を追加します。

行名の前に「class1_」を追加してみましょう。

pre_sr = point_serise.add_prefix('class1_')
pre_sr

出力:

class1_0 51
class1_1 70
class1_2 35
Name: J, dtype: int64

行名の後ろに「_jap」を追加します。

suf_sr = point_serise.add_suffix('_Jap')
suf_sr

出力:

0_Jap 51
1_Jap 70
2_Jap 35
Name: J, dtype: int64

set_axis

set_axisで行名を一括変更できます。

行名を「D」「E」「F」に一括変更します。

axis_sr = point_serise.set_axis(['D', 'E', 'F'])
axis_sr

出力:

D 51
E 70
F 35
Name: J, dtype: int64

index

Serise.indexで行名を「X」「Y」「Z」に変更して、元のSeriseを更新します。

point_serise.index = ['X', 'Y', 'Z']
point_serise

出力:

X 51
Y 70
Z 35
Name: J, dtype: int64

まとめ

今回はpandasで行名・列名を変更する方法を紹介しました。

renameは指定した行名・列名を指定して変更できるので、使い勝手が良くおすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次