pandas:【列,列名,index列】定義変更


前提

サンプルコード

列の追加

データ作成

import pandas as pd
df = pd.DataFrame({'id':['001','002','003'], 'value':[100,200,300]})
print(df)
print(df.shape)
    id  value
0  001    100
1  002    200
2  003    300
(3, 2)
  • サイズ(3,2)のデータを作成
  • 以降で列名id,valueの右に列を追加する

まずは作ってみる

df['key1'] = 'a'
print(df)
    id  value key1
0  001    100    a
1  002    200    a
2  003    300    a
  • 「key1」列が追加になっている
  • 'a’
    • 全部の行が同じになる

行ごとにデータ設定

df['key2'] = [11,22,33]
print(df)
    id  value key1  key2
0  001    100    a    11
1  002    200    a    22
2  003    300    a    33
  • 「key2」列が追加になっている
  • [11,22,33]
    • リストで設定
    • 行数分データを設定する

参考

  • 他にデータフレームをつなげる方法もある
  • 以下の記事で説明

列名の変更

データ作成

import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(8).reshape(2,4))
print(df)
print(df.shape)
   0  1  2  3
0  0  1  2  3
1  4  5  6  7
(2, 4)
  • サイズ(2,4)のデータを作成
  • 次項で列名2(自動で振られたインデックス番号の列名)を変更する

データ作成

df.rename(columns={2:'aa'}, inplace=True)
print(df)
   0  1  aa  3
0  0  1   2  3
1  4  5   6  7
  • df.rename()を使って変更
  • columns={2:’aa’}
    • 2を’aa’に変更
  • inplace=True
    • inplace=False(デフォルト)では元データが変更されない

ある列を【インデックス列】に指定する

パターン1

パターン2

df.set_index('state')
df.set_index(['state', 'age']) 
df.set_index('Name', inplace=True) 
df.set_index('gender', append=True)
df.set_index('age', verify_integrity=True)
  • 構文説明のみ
  • 1行目 …… 通常の指定
  • 2行目 …… 2列を指定
    • []で囲う
  • 3行目 …… inplace=True
    • 元のデータフレームを変更する
    • デフォルトはFalse
  • 4行目 …… append=True
    • 元のインデックスに加えて指定の列をインデックスに追加する
  • 5行目 …… verify_integrity=True
    • インデックスに追加する列を重複があるかチェック
    • エラー例
      • ValueError: Index has duplicate keys: Int64Index([18, 17], dtype=’int64′, name=’age’))

列の削除

データ作成

import pandas as pd
df = pd.DataFrame(np.random.randint(1,10,(2,4)), columns=['a','b','c','d'])
print(df)
print(df.shape)
   a  b  c  d
0  5  2  6  4
1  5  5  4  8
(2, 4)
  • サイズ(2,4)のデータを作成

1列削除する

df.drop(columns='c')
   a  b  d
0  5  2  4
1  5  5  8
  • df.dropを使用する
  • 列名cが削除された
  • inplaceを指定していない(デフォルトがFalse)ので元データは削除されない

複数列削除する

df.drop(columns=['c','d'])
   a  b
0  5  2
1  5  5
  • 列名c,dの2列が削除された
  • inplaceを指定していない(デフォルトがFalse)ので元データは削除されない

応用

ラベルエンコーディングの例

データ作成

import pandas as pd
df = pd.DataFrame({'id':['001','002','003','004','005'], 'value':[100,200,300,400,500], 'key':['x','y','x','z','y']})
print(df)
    id  value key
0  001    100   x
1  002    200   y
2  003    300   x
3  004    400   z
4  005    500   y
  • ラベルエンコーディング
    • sklearnを利用
    • 文字列を数値に置き換えること(種類ごとに数値を割り振る)
    • 別記事にまとめたらリンク貼る★
  • 次項でkey列をエンコーディングする

エンコーディングと列データ追加

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
encoded = le.fit_transform(df['key'].values)
df['key_id'] = encoded
print(encoded)
print(df)
[0 1 0 2 1]
    id  value key  key_id
0  001    100   x       0
1  002    200   y       1
2  003    300   x       0
3  004    400   z       2
4  005    500   y       1
  • 3行目(encoded変数)
    • 「key」の値:['x’,’y’,’x’,’z’,’y’]がエンコードされている
    • [0 1 0 2 1]
      • xが0、yが1、zが2
  • 4行目
    • 「key_id」として[0 1 0 2 1]が設定されている


Posted by futa