Pandas★データの操作

2021年11月2日

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]

dfDataFrame名
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

Pandas

Posted by Bright_Noah