PandasでSQL文って使えるの?
こんな疑問にお答えします。
- PandasでSQLを使えるのか調査
- Pandasでqueryを使ってみた
こんにちは。
PandasでCSVファイルから取り込んだデータ解析の練習をしていたときに、SQLを使うことができたら便利じゃないか!?と思うことがありました。
そこで本記事ではPandasでSQLを使うことができるのか検証します。
結論:PandasでSQLは使えます
PandasでSQLは使えます。
公式ドキュメントにも記載がありました。
ただし、sqlite3などで接続したデータベースに対してのみ有効なようです。
sqlite3に関する記事↓
参考:【SQLite】SQLiteにはじめて触ってみた感想 Jupyter Notebookのログ解析に
また、当たり前ですが CSV などからPandasに読み込んだデータに対してはSQLは使えません。
すでにデータは取り込み済みであるため、SQLという武器を使う必要はないということです。
もう少し調べてみると query メソッドを使うことで取り込んだデータに対してフィルターを効かせることができるということがわかりました。
以前CSVファイルを読み込んだ際に使ったデータを用いてPandasでqueryを実行しデータのフィルターを実践してみます。
Pandasで query を実行する
今回使うデータはここにアップロードしておきます。(当ブログのサーバー上)
前処理で次のコードを実行します。
import numpy as np
import pandas as pd
df = pd.read_csv('./population_data.csv')
df = df.drop(df.index[[0]]) #1行目を削除
# インデックス:タイトルを変更
df.rename(columns = {"男【千人】":"man"}, inplace = True)
df.rename(columns = {"女【千人】":"woman"}, inplace = True)
df.rename(columns = {"年齢各歳":"age"}, inplace = True)
#前処理
age = df['age'].str.replace('歳', '').str.replace('以上', '')
man = df['man'].str.replace(',', '')
woman = df['woman'].str.replace(',', '')
#前処理したデータをデータフレームに戻す
df['age'] = np.array(age, dtype=np.int64)
df['man'] = np.array(man, dtype=np.int64)
df['woman'] = np.array(woman, dtype=np.int64)
df.head() で最初の5行を確認します。
queryメソッドで年齢が10歳以下という条件でフィルターしてみます。
コマンドは df.query(‘age < 10’) となります。
25歳から40歳とする場合は df.query(’25 < age < 40′) というコマンドになります。
確かにフィルターされていることが確認できました。
df.query(’25 < age < 40 and man > 700′) というように複数の条件を加えることも可能でした。
まとめ
- PandasでSQLの実行はできる(条件有)
- 取り込んだデータのフィルターには query メソッドを使う
- SQLiteなどのデータベースに対してread_sqlでSQLの実行が可能