pandas データフレームの行名・列名の参照と変更と追加

 2018/02/01    2018/07/18    Pythonデータ解析入門    

当記事では、pandasのデータフレーム(DataFrame)の行名・列名の参照や変更。また、列名を利用した新しい列の追加の方法を紹介しています。こちらのcsvファイル→サンプルcsvファイルを説明用に使うので、同じことがしたい方はダウンロードして使ってください!

まずはデータを読み込みます。

import pandas as pd #pandasをpdとしてインポート

#データをdfに読み込み。
df = pd.read_csv("sample.csv")

#dfの中身を確認
print(df)

今回使うデータは以下のような形になっています。

   number  age  blood_pressure  lung_capacity sex  weight  disease
0       1   22             110           4300   M      79        1
1       2   23             128           4500   M      65        1
2       3   24             104           3900   F      53        0
3       4   25             112           3000   F      45        0
4       5   27             108           4800   M      80        0

行名、列名を参照する方法

.indexで行名、.clumnsで列名を参照できます。

df.index #行名

RangeIndex(start=0, stop=5, step=1)
df.columns #列名

Index(['number', 'age', 'blood_pressure', 'lung_capacity', 'sex', 'weight',
       'disease'],
      dtype='object')

行名、列名はリストなので、スライスで取り出したい部分だけ取り出すことも可能です。

df.columns[1:4:2]

Index(['age', 'lung_capacity'], dtype='object')

行名、列名の変更

代入で変更する

行名、列名を変更するには、変更先の名前をリストにして代入します。

df.columns = ['番号','年齢','血圧','肺活量','性別','病気','体重']
print(df)

   番号  年齢   血圧   肺活量 性別  病気  体重
0   1  22  110  4300  M  79   1
1   2  23  128  4500  M  10   1
2   3  24  104  3900  F  53   0
3   4  25  112  3000  F  45   0
4   5  27  108  4800  M  80   0
df.index = ["Jack","Tom","Lisa","Michel","Jacson"]
print(df)
        番号  年齢   血圧   肺活量 性別  病気  体重
Jack     1  22  110  4300  M  79   1
Tom      2  23  128  4500  M  10   1
Lisa     3  24  104  3900  F  53   0
Michel   4  25  112  3000  F  45   0
Jacson   5  27  108  4800  M  80   0

ちなみに、この方法の場合、丸ごと変更する必要があります。部分的に変更しようとすると、

df.index[1] = 2

*** TypeError: Index does not support mutable operations

と、エラーに弾かれます。

.rename()を用いて変更する

.rename()を使えばピンポイントで変更したい箇所を指定して変更できます。

df.rename(columns={"age":"年齢"})

   number  年齢  blood_pressure  lung_capacity sex  weight  disease
0       1  22             110           4300   M      79        1
1       2  23             128           4500   M      65        1
2       3  24             104           3900   F      53        0
3       4  25             112           3000   F      45        0
4       5  27             108           4800   M      80        0

行と列を同時。カンマで区切ることで複数変更も可能です。

df.rename(columns={"age":"年齢","number":"番号"},index={0:"Jack"})

      番号  年齢  blood_pressure  lung_capacity sex  weight  disease
Jack   1  22             110           4300   M      79        1
1      2  23             128           4500   M      65        1
2      3  24             104           3900   F      53        0
3      4  25             112           3000   F      45        0
4      5  27             108           4800   M      80        0

この方法の場合、以下のように変更後のものを代入しないと元の状態のままです。

df = df.rename(columns={"age":"年齢","number":"番号"},index={0:"Jack"})

新しい列を作る

データフレームに無い列名を指定して、要素を代入すると新しい列が最後尾に追加されます。

df["身長"] = [173,145,167,155,132]
print(df)

        番号  年齢   血圧   肺活量 性別  病気  体重   身長
Jack     1  22  110  4300  M  79   1  173
Tom      2  23  128  4500  M  10   1  145
Lisa     3  24  104  3900  F  53   0  167
Michel   4  25  112  3000  F  45   0  155
Jacson   5  27  108  4800  M  80   0  132

リストの長さは行数と一致することが求められます。してないと、、、

df["身"] = [173,145,167,155]

*** ValueError: Length of values does not match length of index

と表示されます。

  • スポンサーリンク

  • 関連コンテンツ

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA