Cheatsheetでdata framesのsubsetsの作成方法を学びます。
https://i.loli.net/2018/02/09/5a7d635467064.png
学ぶ内容は次です。
seabornは、グラフ作成に用います。ここではサンプルデータirisの読み込みに用います。snsで呼び出します。
pandasは、データ・フレームの集計に使います。pdで呼び出します。
sns.iris.sample(5)で、irisからランダムにサンプルを5行取り出します。
import seaborn as sns
import pandas as pd
iris = sns.load_dataset('iris')
df = iris.sample(5)
print(df)
## sepal_length sepal_width petal_length petal_width species
## 109 7.2 3.6 6.1 2.5 virginica
## 8 4.4 2.9 1.4 0.2 setosa
## 5 5.4 3.9 1.7 0.4 setosa
## 130 7.4 2.8 6.1 1.9 virginica
## 145 6.7 3.0 5.2 2.3 virginica
dfの列名を変更するコードは次です。
df.columns = [‘列名’, ‘列名’, ‘列名’,,,,]
dfの行名を変更するコードは次です。
df.index ≒ [‘行名’, ‘行名’, ‘行名’,,,,]
df.columns = ['col1', 'col2', 'col3', 'col4', 'col5']
df.index = ['obs1', 'obs2', 'ons3', 'obs4', 'obs5']
print(df)
## col1 col2 col3 col4 col5
## obs1 7.2 3.6 6.1 2.5 virginica
## obs2 4.4 2.9 1.4 0.2 setosa
## ons3 5.4 3.9 1.7 0.4 setosa
## obs4 7.4 2.8 6.1 1.9 virginica
## obs5 6.7 3.0 5.2 2.3 virginica
列名を1列取り出すコードは次です。
データ名[‘行名’]、あるいは、データ名.行名
df['col2']
## obs1 3.6
## obs2 2.9
## ons3 3.9
## obs4 2.8
## obs5 3.0
## Name: col2, dtype: float64
あるいは、
df.col2
## obs1 3.6
## obs2 2.9
## ons3 3.9
## obs4 2.8
## obs5 3.0
## Name: col2, dtype: float64
複数列をデータ・フレームとして取り出すコードは次です。
データ名[[‘列名’, ‘列名’,,,]]
df[['col1', 'col5']]
## col1 col5
## obs1 7.2 virginica
## obs2 4.4 setosa
## ons3 5.4 setosa
## obs4 7.4 virginica
## obs5 6.7 virginica
Indexで行を取り出します。Indexは表の一番左の列で一番上が空白になっています。
コードは次です。
loc[[‘行名’, ‘行名’,,,]]で、行を列名(インデクス)で選びます。
df.loc[['obs1', 'obs2']]
## col1 col2 col3 col4 col5
## obs1 7.2 3.6 6.1 2.5 virginica
## obs2 4.4 2.9 1.4 0.2 setosa
インデクス番号は0から始まります。’ ’は不要です。
コードは次です。
iloc[[番号, 番号,,,]
df.iloc[[0, 1]]
## col1 col2 col3 col4 col5
## obs1 7.2 3.6 6.1 2.5 virginica
## obs2 4.4 2.9 1.4 0.2 setosa
df[df.col5 == 'versicolor']
## Empty DataFrame
## Columns: [col1, col2, col3, col4, col5]
## Index: []
df[df['col5'] == 'versicolor']
## Empty DataFrame
## Columns: [col1, col2, col3, col4, col5]
## Index: []
a.isin( )を用いる
ます、真偽のデータ・フレームを取得します。
selected = df.col5.isin(['versicolor', 'setosa'])
selected
## obs1 False
## obs2 True
## ons3 True
## obs4 False
## obs5 False
## Name: col5, dtype: bool
次に、真となる行を取り出します。
df[selected]
## col1 col2 col3 col4 col5
## obs2 4.4 2.9 1.4 0.2 setosa
## ons3 5.4 3.9 1.7 0.4 setosa
b.locとlogical indexingを用いる
df.loc[(df['col5'] == 'setosa') | (df['col5'] == 'versicolor')]
## col1 col2 col3 col4 col5
## obs2 4.4 2.9 1.4 0.2 setosa
## ons3 5.4 3.9 1.7 0.4 setosa
To be continued.