スポンサーリンク

【Python】PandasでSQLやQueryを実行する

Python
スポンサーリンク
本ページにはプロモーションが含まれています。
たろ
たろ

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の実行が可能
タイトルとURLをコピーしました