「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Pythonによるデータ分析(その14/X)

 仕事上、早々に\mathrm{Python}を使えるようにしないといけないため、

を基に学んでいく。

4. pandas入門

 \mathrm{pandas}は多くのコーディング用法を\mathrm{NumPy}から採用しているが、テーブル形式のデータや不均一なデータを扱うために設計されている。

4.2 pandasの重要な機能

4.2.2 軸から要素を削除

 特定の軸(列・行など)から、1つかそれ以上の要素を削除するのは容易である。削除したい要素を指定するインデックスの配列やリストを用意するのみである。\mathrm{drop}メソッドを用いると指定した要素が軸から削除された新しいオブジェクトを作成する。

import pandas as pd
import numpy as np

obj = pd.Series(np.arange(5.), index = ['a','b','c','d','e'])

new_obj = obj.drop('c')

print(obj)
print(new_obj)
obj.drop(['d','c'])


 データフレームは、インデックスの要素をいずれの軸からでも削除できる。

# インデックスの要素を削除
data = pd.DataFrame(np.arange(16).reshape((4,4)),
                   index = ['Ohio','Colorado','Utah','New York'],
                   columns = ['one','two','three','four'])
print(data)

# 特に指定しない(もしくはaxis引数に0または'index'と指定すると)と行を削除
data.drop(['Colorado','Ohio'])

# axis引数に1または'columns'と指定すると列を削除
data.drop('two',axis = 1)

print('******************************')

# inplace引数にTrueを渡すことで、参照元を変更する
obj.drop('c', inplace = False) # 基本的に参照渡し
print(obj)

obj.drop('c', inplace = True)
print(obj)
4.2.3 インデックス参照、選択、フィルタリング

 インデックス参照、選択、フィルタリングには様々な方法がある。

##########################
### インデックスの参照 ###
##########################

import pandas as pd

obj = pd.Series(np.arange(4.), index = ['a','b','c','d'])
print(obj)
print('')

# 以下は同じ
# obj['b']
# obj[1]
print(obj['b']==obj[1])
print('')

# 連続的に整数値で指定
print(obj[2:4])

print('')
# 複数インデックス値や(連続的でない)複数の整数値を選択するにはリストを渡す
print(obj[['b','a','d']])
print(obj[[1,3]])
print(obj[obj <  2]) # boolean
print('')

# ラベルを用いたスラインシングは終点を含む
print(obj['b':'c'])
print('')

# スライスされたものを変更すると、参照元が変更
obj['b':'c'] = 5
print(obj['b':'c'])
print('')


### データフレームに対するインデックス参照
data = pd.DataFrame(np.arange(16).reshape((4,4)),
                    index = ['Ohio','Colorado','Utah','New York'],
                    columns = ['one','two','three','four'])
print(data['two'])
print(data[['three','one']])
print('')

print(data[:2])
print('')

print(data[data['three']>5]) # three列の5よりも大きい行を抽出
print('')


# 同じ行数・列数の真偽値のデータフレームで抽出も可能
flg = data < 5
data[flg] = 0
print(data)
###########################
### loc, ilocによる抽出 ###
###########################

# 前段で紹介した方法よりもこちらの方法での抽出を推奨!

import pandas as pd

data = pd.DataFrame(np.arange(16).reshape((4,4)),
                    index = ['Ohio','Colorado','Utah','New York'],
                    columns = ['one','two','three','four'])


# loc: ラベルで指定
print(data.loc['Colorado',['two','three']])
print('')

# iloc: 整数値で指定
print(data.iloc[2,[3,0,1]])
print('')

# いずれもスライシングも可能
print(data.loc[:'Colorado',['two','three']])
print(data.iloc[:2,[3,0,1]])
print('')
方法
説明
\mathrm{df[val]} データフレームから列や列のシーケンスを抽出する。
\mathrm{df.loc[val]} データフレームの1つ以上の行をラベルを指定して選択する。
\mathrm{df.loc[:,val]} 1つ以上の列をラベルを指定して選択する。
\mathrm{df.loc[val1,val2]} 行・列をそれぞれラベルを指定して選択する。
\mathrm{df.iloc[where]} データフレームの1つ以上の行を整数のインデックス位置を指定して選択する。
\mathrm{df.iloc[:,where]} 1つ以上の列を整数のインデックス位置を指定して選択する。
\mathrm{df.iloc[where1,where2]} 行・列を整数のインデックス位置を指定することで選択する。
\mathrm{df.at[label1,label2]} 行と列のラベルを指定して1つの値を取得する。
\mathrm{df.iat[i,j]} 行と列のインデックス位置を指定して1つの値を取得する。
\mathrm{reindex}メソッド 行や列をラベルを指定して選択する。
\mathrm{get}_\mathrm{value},

\mathrm{set}_\mathrm{value}メソッド
行と列のラベルを指定して1つの値を選択する。
プライバシーポリシー お問い合わせ