【Pandas】行名や列名を一括で変更する方法[Python]

  • URLをコピーしました!
目次

Pandas

前回、Pythonのリストで特定のインデックスの場所に要素を追加する方法(insert)を紹介しました。

今回はPandasで行名や列名を一括で変更する方法を紹介します。

まずは基本となるデータフレームを作成するために、こんな感じのプログラムを準備しました。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

print(df)

実行結果
   0  1  2  3  4
0  1  2  3  4  5
1  2  3  4  5  6
2  3  4  5  6  7

それでは始めていきましょう。

行名を一括で変更する方法

行名を一括で変更するには「データフレーム.set_axis(新規行名のリスト)」とします。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B", "C"]

df_new1 = df.set_axis(indexnames)

print(df_new1)

実行結果
   0  1  2  3  4
A  1  2  3  4  5
B  2  3  4  5  6
C  3  4  5  6  7

デフォルトで行名の一括変更をしてくれますが、明示する場合は「axis=0」か「axis=”index”」というオプションを追加します。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B", "C"]

df_new1 = df.set_axis(indexnames, axis=0)

print(df_new1)

実行結果
   0  1  2  3  4
A  1  2  3  4  5
B  2  3  4  5  6
C  3  4  5  6  7
import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B", "C"]

df_new1 = df.set_axis(indexnames, axis="index")

print(df_new1)

実行結果
   0  1  2  3  4
A  1  2  3  4  5
B  2  3  4  5  6
C  3  4  5  6  7

ちなみに既存の行の数と新たに指定する行名の数が一致しない場合はエラーとなります。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B"]

df_new1 = df.set_axis(indexnames)

print(df_new1)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[1], line 11
      7 df = pd.DataFrame(data)
      9 indexnames = ["A", "B"]
---> 11 df_new1 = df.set_axis(indexnames)
     13 print(df_new1)

(中略)

ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements
import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B", "C", "D"]

df_new1 = df.set_axis(indexnames)

print(df_new1)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[2], line 11
      7 df = pd.DataFrame(data)
      9 indexnames = ["A", "B", "C", "D"]
---> 11 df_new1 = df.set_axis(indexnames)
     13 print(df_new1)

(中略)

ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements

もし元のデータフレームを書き換えていい場合は「データフレーム.index = 新規の行名のリスト」として行名を書き換えることもできます。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

indexnames = ["A", "B", "C"]

df.index = indexnames

print(df)

実行結果
   0  1  2  3  4
A  1  2  3  4  5
B  2  3  4  5  6
C  3  4  5  6  7

列名を一括で変更する方法

列名を一括で変更する場合、「データフレーム.set_axis()」のオプションに「axis=1」、もしくは「axis=”columns”」を追加します。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

columnnames = ["a", "b", "c", "d", "e"]

df_new2 = df.set_axis(columnnames, axis=1)

print(df_new2)

実行結果
   a  b  c  d  e
0  1  2  3  4  5
1  2  3  4  5  6
2  3  4  5  6  7
import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

columnnames = ["a", "b", "c", "d", "e"]

df_new2 = df.set_axis(columnnames, axis="columns")

print(df_new2)

実行結果
   a  b  c  d  e
0  1  2  3  4  5
1  2  3  4  5  6
2  3  4  5  6  7

列名を変更する場合でも、既存の列の数と新たに指定する列名の数が一致しない場合はエラーとなります。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

columnnames = ["a", "b", "c", "d"]

df_new2 = df.set_axis(columnnames, axis=1)

print(df_new2)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[3], line 11
      7 df = pd.DataFrame(data)
      9 columnnames = ["a", "b", "c", "d"]
---> 11 df_new2 = df.set_axis(columnnames, axis=1)
     13 print(df_new2)

(中略)

ValueError: Length mismatch: Expected axis has 5 elements, new values have 4 elements
import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

columnnames = ["a", "b", "c", "d", "e", "f"]

df_new2 = df.set_axis(columnnames, axis=1)

print(df_new2)

実行結果
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[4], line 11
      7 df = pd.DataFrame(data)
      9 columnnames = ["a", "b", "c", "d", "e", "f"]
---> 11 df_new2 = df.set_axis(columnnames, axis=1)
     13 print(df_new2)

(中略)

ValueError: Length mismatch: Expected axis has 5 elements, new values have 6 elements

もし元のデータフレームを書き換えていい場合は「データフレーム.columns = 新規の列名のリスト」として列名を書き換えることもできます。

import pandas as pd

data = [[1, 2, 3, 4, 5],
        [2, 3, 4, 5, 6],
        [3, 4, 5, 6, 7]]

df = pd.DataFrame(data)

columnnames = ["a", "b", "c", "d", "e"]

df.columns = columnnames

print(df)

実行結果
   a  b  c  d  e
0  1  2  3  4  5
1  2  3  4  5  6
2  3  4  5  6  7

次回はPandasのデータフレームからデータを抽出し、concatを使って連結させる場合に注意することを紹介します。

ではでは今回はこんな感じで。

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

コメント

コメントする

目次