Python 無料で独習 データ抽出の方法 Pandas入門07

Python
この記事は約6分で読めます。

Pandasによるデータの抽出方法

今回の講義ではDataFrameの特定の列や行、
特定の条件に一致するデータを抽出する方法を学習します。
まずは前回同様、データを読み込みます。
データにつきましても前回同様
下記URLからダウンロードできます。
1920年から2015年までの全国の人口推移のデータ

データはjupyternotebookと同じフォルダに保存します。
ただ、どうゆうわけかキノコードさんと同じ列数の
データを見つける事ができませんでした。
講義とは若干異なってきますが、臨機応変にやっていきたいと思います。
ではpandasインポート、表示する行数の設定、
データの読み込みを行います。

import pandas as pd
pd.set_option('display.max_columns', None) # 最大表示列数
pd.set_option('display.max_rows', 5) # 最大表示行数
df = pd.read_csv('c01.csv', encoding = 'shift-jis')
df

次にindex番号の変更を行います。
詳しい理由は現段階ではわかりませんが、
通常0,1,2,3,4と割り振られるindex番号を1,2,3,4と変えます。

df.index = df.index + 1
df

すべてのindexに1を足すことによって
1,2,3,4,5の1から始まるindexに変更されます。

DataFrameをスライスでデータ抽出

スライスとは、データの一部分を切り取って
データ取得する仕組みのことらしいです。
コードでいうと

df[0:3]
都道府県コード	都道府県名	元号	和暦(年)	西暦(年)	注	人口(総数)	人口(男)	人口(女)
1	00	全国	大正	9.0	1920.0	NaN	55963053	28044185	27918868
2	01	北海道	大正	9.0	1920.0	NaN	2359183	1244322	1114861
3	02	青森県	大正	9.0	1920.0	NaN	756454	381293	375161

たった一行のこのコードで上から3行のデータを
抽出することができました。
ちなみにこのdf[0:3]は0スタートの場合は0を省略することができ、
df[:3]で同じ結果を出力することができます。

他にも途中の数行を抽出したい場合、たとえば
10〜14行目を抽出したい場合は df[9:14]
101〜105行目を抽出したい場合 df[100:105]
となります。

スライスでデータ抽出してSeriesを作成

DataFrameから一列データを取り出すとSeriesになります。
四角括弧の中に抽出したいカラム名を入れます。
今回は表示する行数を指定する為に:5としています。

df['人口(総数)'][:5]
1    55963053
2     2359183
3      756454
4      845540
5      961768
Name: 人口(総数), dtype: object

このやり方ですと、Seriesになりますが、
DataFrameのままでデータを扱いたい場合は
四角括弧を二重にします。

df[['人口(総数)']][:5]
人口(総数)
1	55963053
2	2359183
3	756454
4	845540
5	961768

条件でデータ抽出

四角括弧で検索したい列のカラム名を指定して
その横にそのまま条件式を入れます。

df[df['西暦(年)'] == 2015]

	都道府県コード	都道府県名	元号	和暦(年)	西暦(年)	注	人口(総数)	人口(男)	人口(女)
931	00	全国	平成	27.0	2015.0	NaN	127094745	61841738	65253007
932	0A	人口集中地区	平成	27.0	2015.0	NaN	86868176	42363423	44504753
...	...	...	...	...	...	...	...	...	...
979	46	鹿児島県	平成	27.0	2015.0	NaN	1648177	773061	875116
980	47	沖縄県	平成	27.0	2015.0	NaN	1433566	704619	728947
50 rows × 9 columns

条件を2つ入れる and条件

df[(df['西暦(年)'] == 2015) & (df['都道府県名'] == '東京都')]

	都道府県コード	都道府県名	元号	和暦(年)	西暦(年)	注	人口(総数)	人口(男)	人口(女)
946	13	東京都	平成	27.0	2015.0	NaN	13515271	6666690	6848581

or条件

df[(df['西暦(年)'] == 2010) | (df['西暦(年)'] == 2015)]

都道府県コード	都道府県名	元号	和暦(年)	西暦(年)	注	人口(総数)	人口(男)	人口(女)
881	00	全国	平成	22.0	2010.0	NaN	128057352	62327737	65729615
882	0A	人口集中地区	平成	22.0	2010.0	NaN	86121462	42051390	44070072
...	...	...	...	...	...	...	...	...	...
979	46	鹿児島県	平成	27.0	2015.0	NaN	1648177	773061	875116
980	47	沖縄県	平成	27.0	2015.0	NaN	1433566	704619	728947
100 rows × 9 columns

OR条件でのデータ抽出は、「|(パイプライン、縦棒)」でできます。

特定の値に一致するデータ抽出するisinメソッド(複数条件)

df[df['西暦(年)'].isin([2010,2015])]

都道府県コード	都道府県名	元号	和暦(年)	西暦(年)	注	人口(総数)	人口(男)	人口(女)
881	00	全国	平成	22.0	2010.0	NaN	128057352	62327737	65729615
882	0A	人口集中地区	平成	22.0	2010.0	NaN	86121462	42051390	44070072
...	...	...	...	...	...	...	...	...	...
979	46	鹿児島県	平成	27.0	2015.0	NaN	1648177	773061	875116
980	47	沖縄県	平成	27.0	2015.0	NaN	1433566	704619	728947
100 rows × 9 columns

こちらのコードですと、結構スマートに抽出できてる感じです。

特定の値を含むデータを抽出するcontainsメソッド

個人的に今日勉強してみて、便利な機能だなぁ~と感心しました。
都道府県の名前で、例えば感じの'山'を含んでる都道府県を抽出できたりします。
分一致する行を抽出するには、
PandasのSeriesのstrメソッドと、
抽出したい文字列の場所の
条件に応じて、
containメソッド、
endswithメソッド、
startswithメソッドを組み合わせて使えばよいみたいです。

df['都道府県名'].str.contains('山')

1      False
2      False
       ...  
981      NaN
982      NaN
Name: 都道府県名, Length: 982, dtype: object

コメント

タイトルとURLをコピーしました