2
5

More than 1 year has passed since last update.

簡単なSQLをpandasに紐づけて学習しよう

Posted at

はじめに

本記事では、SQLと同等の動きをするpandasの記述方法をまとめます。

記事の方針

pandasを学習している際に、動作が似ていて、普段使用しているSQLに紐づけることで記憶に残るのではないかと考えました。
そのため、普段SQLで使用する操作をpandasではどのように記述するのかという視点でまとめていきたいと思います。

使用データ

本記事では以下のデータを使用します。
拾ったお金の情報を記したものとしてみてください。

以下データは、SQLではtblテーブル、pandasではtbl.csvとして操作するものとします。

ymd name money
2023/02/01 Sato 10000
2023/02/01 Tanaka 3100
2023/02/01 Aoki 8800
2023/02/02 Sato 2000
2023/02/02 Tanaka 9300
2023/02/02 Aoki 12000
2023/02/03 Sato 2000
2023/02/03 Tanaka 10000
2023/02/03 Aoki 10000
2023/02/04 Sato 5800
2023/02/04 Tanaka 1000
2023/02/04 Aoki 7500

前提

以降、下記操作を前提とします。

import pandas as pd
df = pd.read_csv('tbl.csv')

SELECT

全件

  • SQL
SELECT * 
FROM tbl;
  • pandas
print(df)

列指定

  • SQL
SELECT ymd, money 
FROM tbl;
  • pandas
df[['ymd', 'money']]

条件指定

等価条件

  • SQL
SELECT * 
FROM tbl
WHERE name = 'Sato';
  • pandas
df[df['name'] == 'Sato']

比較条件

  • SQL
SELECT *
FROM tbl
WHERE money < 9000;
  • pandas
df[df['money'] < 9000]

複数条件

  • SQL
SELECT * 
FROM tbl
WHERE ymd <> '2023/02/03' and name <> 'Aoki';
  • pandas
df[(df['ymd'] != '2023/02/03') & (df['name'] != 'Aoki')]

※pandasの複数条件指定では、条件ごとに括弧で括る

UPDATE

  • SQL
UPDATE tbl
SET money = 0
WHERE ymd < '2023/02/02' or name = 'Sato';
  • pandas
df['money'] = df['money'].where((df['ymd'] < '2023/02/02') | (df['name'] == 'Sato'), 0)

INSERT

  • SQL
INSERT INTO tbl
VALUES('2023/02/05', 'Sato', 20000);
  • pandas
df2 = pd.Series(['2023/02/05', 'Sato', 20000], name=0, index=['ymd', 'name', 'money']) # 追加する行を作成
df = df.append(df2) # 行追加
df = df.reset_index(drop=True) # インデックス番号を連番に変更

※pandasでは、追加する行のインデックスを仮置きで0としている。

DELETE

全削除

  • SQL
DELETE tbl;
  • pandas
df = df.drop(range(len(df)))

行削除

  • SQL
DELETE tbl
WHERE money < 10000;
  • pandas
df = df[df['money'] >= 10000]

最後に

よりスマートなpandasの記述方法があると感じました。
また、SQLの操作はまだまだ存在するため、随時紐づけ

参考文献

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5