【Pandas入門】DataFrame等の列の名前を指定できるcolumns引数!

こんにちは!インストラクターのフクロウです!

この記事では、DataFrameの列の名前にまつわる操作についてまとめました。

  • DataFrameのculumns引数で列名を作成時に指定
  • DataFrameのculumns引数で列名を作成後に変更
  • DataFrameのrenameメソッドで列名・行名を作成後に変更

これらの操作、使い方わかりますか?

もしもわからないものがあったら、この記事の続きを是非ご覧ください!

目次

データフレームと行の名前

DataFrameを作る際には様々なパラメータが使えます。

例えばデータフレームの要素を代入するパラメータだったり、列の名前を設定するcolumnsだったりです。

ここでは、

  • 列の名前にfeature変数
  • 行の名前にname変数
  • DataFrameの要素にdata変数

を与える場合を考えます。

In [1]:

import pandas as pd 
import numpy as np
In [2]:
name = ["taro","jiro","saburo","shiro"]

feature = ["height","weight","blood type","age"]

data = np.array([
    [190,180,170,160],
    [100,90,80,70],
    ["A","B","AB","O"],
    [30,28,26,24]
]).T

df = pd.DataFrame(data, 
                  index=name) # 行の名前を設定
df
Out[2]:
0 1 2 3
taro 190 100 A 30
jiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

この表において、[0,1,2,3]と書かれている列が「 列の名前」と呼んでいるものです。

何も設定しない場合は、からナンバリングされます。

この値を変更する方法を学んでいきましょう。

columnsパラメータで列名を指定

DataFrame作成後に列名を指定

DataFrameにはcolumnsというパラメータ(インスタンス属性)があります。

このパラメータを使うことで、作成した後のDataFrameにも列名を付与できます。

In [3]:
df2 = df.copy()

df2.columns = feature

df2
Out[3]:
height weight blood type age
taro 190 100 A 30
jiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

ちなみに列数と列名リストのサイズが違うと、エラーになってしまうので注意です。

In [4]:
df2.columns = feature[:-1]

[エラーメッセージ]

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-0196f13dbfe5> in <module>
----> 1 df2.columns = feature[:-1]

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in __setattr__(self, name, value)
   4387         try:
   4388             object.__getattribute__(self, name)
-> 4389             return object.__setattr__(self, name, value)
   4390         except AttributeError:
   4391             pass

pandas/_libs/properties.pyx in pandas._libs.properties.AxisProperty.__set__()

~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in _set_axis(self, axis, labels)
    644 
    645     def _set_axis(self, axis, labels):
--> 646         self._data.set_axis(axis, labels)
    647         self._clear_item_cache()
    648 

~/anaconda3/lib/python3.7/site-packages/pandas/core/internals.py in set_axis(self, axis, new_labels)
   3321             raise ValueError(
   3322                 'Length mismatch: Expected axis has {old} elements, new '
-> 3323                 'values have {new} elements'.format(old=old_len, new=new_len))
   3324 
   3325         self.axes[axis] = new_labels

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

DataFrame作成時に列名を指定

DataFrameの設定時に、columnsを使うことでDataFrameの列名を指定できます。

In [5]:
df3 = pd.DataFrame(data, 
                   columns=feature, # 列の名前を指定
                   index=name)      # 行の名前を設定
df3
Out[5]:
height weight blood type age
taro 190 100 A 30
jiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

renameメソッドで列名・行名を後から変更する

columnsパラメータは、列数と代入するリストのサイズが同じでないといけませんでした。

それだと列数が膨大であるとき大変ですね。

そのようなときは、変更したい名前だけを辞書型で指定して変更することができるrenameメソッドが使えます。

In [6]:
df3.rename(
    columns={"height":"身長", "weight":"体重"}, # 列名を変更,  {変更前:変更後}
    index={"jiro":"kojiro"} # 行名を変更
    
)
Out[6]:
身長 体重 blood type age
taro 190 100 A 30
kojiro 180 90 B 28
saburo 170 80 AB 26
shiro 160 70 O 24

このメソッドだと、df.rename( columns={変更前:変更後})と書くことで変更したい値だけ変更することが可能です!

まとめ

この記事では、DataFrameの列名を設定・変更する方法についてまとめました。

大きく分けて二つ、

  • DataFrameのcolumnsパラメータ
  • DataFrameのrenameメソッド

これらを使いこなすことで、列名を好きな値にすることができますよ!

使い方も簡単でしたね。ぜひ使ってみて下さい!

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次