Pandas★データの操作

Pandasにはデータを操作するちょっとしたコツみたいな物が存在するので、紹介していきたいと思います。
目次
サンプルデータ
このデータを元に下記の例を説明していきます。
import pandas as pd
area = pd.Series({'California': 423967, 'Texas': 695662,
'New York': 141297, 'Florida': 170312,
'Illinois': 149995})
pop = pd.Series({'California': 38332521, 'Texas': 26448193,
'New York': 19651127, 'Florida': 19552860,
'Illinois': 12882135})
sc = pd.Series({'California': 'Sacramento', 'Texas': 'Austin',
'New York': 'Albany', 'Florida': 'Tallahassee',
'Illinois': 'Springfield'})
data = pd.DataFrame({'area':area, 'pop':pop, 'state capital':sc})
print(data)
area pop state capital
California 423967 38332521 Sacramento
Texas 695662 26448193 Austin
New York 141297 19651127 Albany
Florida 170312 19552860 Tallahassee
Illinois 149995 12882135 Springfield
loc,ilocを使ったデータの操作
loc 明示的な処理
配列のインデックスやスライスを明示的に示して処理します。つまり指定したインデックスを使います。
iloc 暗黙的な処理
配列のインデックスやスライスを暗黙的に処理します。つまりPandasが自動で付加したインデックスを使います。
操作例
SeriesとDataFrameのデータを使ったlocとilocで操作を見てみましょう。
Seriesの場合
- locを使ってデータを抽出
area.loc['California']
423967
- ilocを使ってデータを抽出
area.iloc[0]
423967
- locやilocを使わない場合
area['California']
又は
area.California
423967
DataFrameの場合
- locを使ってデータを抽出
data.loc['New York']
area 141297
pop 19651127
state capital Albany
Name: New York, dtype: object
- ilocを使ってデータを抽出
data.iloc[2]
area 141297
pop 19651127
state capital Albany
Name: New York, dtype: object
- locやilocを使わない場合
data['area']
又は
data.area
California 423967
Texas 695662
New York 141297
Florida 170312
Illinois 149995
Name: area, dtype: int64
- locを使って行と列を指定
data.loc[:'New York',:'pop']
area pop
California 423967 38332521
Texas 695662 26448193
New York 141297 19651127
- ilocを使って行と列を指定
data.iloc[:3, :2]
area pop
California 423967 38332521
Texas 695662 26448193
New York 141297 19651127
データの抽出
マスキング
データの絞り込みを行います。
書き方
Seriesの場合
column[column > 100]
column | カラム名 |
等号・不等号の記号 | > < = などが使える |
DataFrameの場合
df[df['column’] > 1000]
又は
df[df.column > 1000]
df | DataFrame名 |
column | カラム名 |
等号・不等号の記号 | < = などが使える |
Seriesの場合
area[area > 300000]
California 423967
Texas 695662
dtype: int64
条件を連結させることもできます。
area[(area > 500000) | (area < 150000)]
Texas 695662
New York 141297
Illinois 149995
dtype: int64
DataFrameの場合
data[data['area'] > 300000]
又は
data[data.area > 300000]
area pop state capital
California 423967 38332521 Sacramento
Texas 695662 26448193 Austin
DataFrameでも同様に条件を連結させることができます。
data[(data.area > 500000) | (data.area > 150000)]
area pop state capital
California 423967 38332521 Sacramento
Texas 695662 26448193 Austin
Florida 170312 19552860 Tallahassee