English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pandas SQL操作

Pandas SQL操作の具体的な例

多くの潜在的PandasユーザーがSQLに詳しいため、このページはPandasでさまざまなSQL操作を実行する方法の例を提供することを目的としています。

 import pandas as pd
 url = 'https://raw.github.com/pandasdev/
 pandas/master/pandas/tests/data/tips.csv'
 tips=pd.read_csv(url)
 print tips.head()

以下に実行結果を示します:

      total_bill   tip      sex  smoker  day     time  size
0        16。99  1.01   Female      No  Sun  Dinner      2
1        10。34  1。66     Male      No  Sun  Dinner      3
2        21.01  3。50     Male      No  Sun  Dinner      3
3        23。68  3。31     Male      No  Sun  Dinner      2
4        24。59  3。61   Female      No  Sun  Dinner      4

クエリ

SQLでは、選択はあなたが選択した列のカンマ区切りのリスト(または*を使用してすべての列を選択します):

 SELECT total_bill, tip, smoker, time
 from tips
 LIMIT 5;

Pandasを使用して、列名リストをDataFrameに渡して列を選択します:

 tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

以下の完全な例を見てみましょう:

 import pandas as pd
 url = 'https://raw.github.com/pandasdev/
 pandas/master/pandas/tests/data/tips.csv'
  
 tips=pd.read_csv(url)
 print tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

以下に実行結果を示します:

   total_bill   tip  smoker      time
0       16。99  1.01      No   Dinner
1       10。34  1。66      No   Dinner
2       21.01  3。50      No   Dinner
3       23。68  3。31      No   Dinner
4       24。59  3。61      No   Dinner

列名リストを指定しないDataFrameを呼び出すと、すべての列が表示されます(SQLの*)。

WHERE条件クエリ

SQLでWHERE子句を使用してフィルタリングします。

 SELECT * from tips WHERE time = 'Dinner' LIMIT 5;

DataFrameはさまざまな方法でフィルタリングできます。最も直感的な方法は、ブール索引を使用することです。

 tips[tips['time'] == 'Dinner'].head(5)

以下に完全な例を示します

 import pandas as pd
 url = 'https://raw.github.com/pandasdev/
 pandas/master/pandas/tests/data/tips.csv'
 tips=pd.read_csv(url)
 print tips[tips['time'] == 'Dinner'].head(5)

以下に実行結果を示します:

     total_bill   tip      sex  smoker  day    time  size
0       16。99  1.01   Female     No   Sun  Dinner    2
1       10。34  1。66     Male     No   Sun  Dinner    3
2       21.01  3。50     Male     No   Sun  Dinner    3
3       23。68  3。31     Male     No   Sun  Dinner    2
4       24。59  3。61   Female     No   Sun  Dinner    4

上記の文は、一連のTrue / DataFrameにFalseオブジェクトを渡し、Trueを持つすべての行を返します。

GroupByグループ

この操作はデータセット内の各グループのレコード数を取得します。例えば、性別ごとのグループと数をクエリ:

 SELECT sex, count(*)
 from tips
 GROUP BY sex;

Pandasでの操作は以下の通りです:

 tips.groupby('sex').size()

以下に完全な例を示します

 import pandas as pd
 url = 'https://raw.github.com/pandasdev/
 pandas/master/pandas/tests/data/tips.csv'
 tips=pd.read_csv(url)
 print tips.groupby('sex').size()

以下に実行結果を示します:

 sex
 Female 87
 Male 157
 dtype: int64

N行の数をクエリ

SQLを使用してLIMITでN行を返す:

 SELECT * from tips
 LIMIT 5 ;

Pandasで操作は以下の通りです:

 tips.head(5)

以下に完全な例を示します

 import pandas as pd
 url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'
 tips=pd.read_csv(url)
 tips = tips[['smoker', 'day', 'time']].head(5)
 print tips

以下に実行結果を示します:

     smoker   day     time
0      No   Sun   Dinner
1      No   Sun   Dinner
2      No   Sun   Dinner
3      No   Sun   Dinner
4      No   Sun   Dinner