ホームページ >データベース >mysql チュートリアル >Pandas の SQL クエリ スタイルでデータのサブセットを選択するにはどうすればよいですか?
この記事では、Pandas を使用して SQL スタイルのフィルタリングによるデータ分析を実行する方法を説明します。ほとんどの企業データはデータベースに保存されており、取得および操作には SQL が必要です。たとえば、Oracle、IBM、Microsoft などの企業は、独自のデータベースと独自の SQL 実装を持っています。
データは常に CSV ファイルに保存されるわけではないため、データ サイエンティストはキャリアのどこかの時点で SQL を扱う必要があります。会社のデータのほとんどは Oracle に保存されているため、私は個人的に Oracle を使用することを好みます。
シナリオ – 1 次の条件を持つすべての映画をデータセットから検索するタスクがあるとします。
SELECT FROM WHERE title AS movie_title ,original_language AS movie_language ,popularityAS movie_popularity ,statusAS movie_status ,vote_count AS movie_vote_count movies_data original_languageIN ('en', 'es') AND status=('Released') AND popularitybetween 500 AND 1000 AND vote_count > 5000;
ニーズを満たす SQL ステートメントを確認できたので、パンダを使用して段階的に進めてみましょう。 2つの方法を紹介します。
1.movies_data データセットを DataFrame に読み込みます。
import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")
各条件に変数を割り当てます。
languages = [ "en" , "es" ] condition_on_languages = movies . original_language . isin ( languages ) condition_on_status = movies . status == "Released" condition_on_popularity = movies . popularity . between ( 500 , 1000 ) condition_on_votecount = movies . vote_count > 5000
3. すべての条件 (ブール配列) を結合します。
final_conditions = ( condition_on_languages & condition_on_status & condition_on_popularity & condition_on_votecount ) columns = [ "title" , "original_language" , "status" , "popularity" , "vote_count" ] # clubbing all together movies . loc [ final_conditions , columns ]
原語 | ステータス | 人気度 | 投票数 | |
---|---|---|---|---|
zh |
公開 |
724.247784 |
10867 |
|
## zh | リリース済み | 514.569956 | 10995 |
|
.query() メソッドは、SQL の where 句スタイルでデータをフィルタリングするためのメソッドです。条件は文字列としてこのメソッドに渡すことができますが、列名にはスペースを含めることはできません。
列名にスペースが含まれている場合は、Python の replace 関数を使用してアンダースコアに置き換えます。 私の経験では、query() メソッドは、より大きな DataFrame に適用すると、以前のメソッドよりも高速であることがわかりました。import pandas as pd movies = pd . read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )4. クエリ文字列を構築し、メソッドを実行します。
.query メソッドは、複数行にわたる三重引用符で囲まれた文字列では機能しないことに注意してください。
final_conditions = ( "original_language in ['en','es']" "and status == 'Released' " "and popularity > 500 " "and popularity < 1000" "and vote_count > 5000" ) final_result = movies . query ( final_conditions ) final_result
##予算
|
id | original_ language | original_title | 人気度 | リリース日 | 収益 | 実行時間 | st | |
---|---|---|---|---|---|---|---|---|---|
165000000
| 157336zh | 星 | 724.247784 | 2014 年 5 月 11 日 | ##675120017 |
##169.0 | 関係 | 788 | |
293660 | zh | #デッドプール9 月 2 日2016 |
783112979 |
p> 108.0 |
関係 |
# 他にもたくさんありますが、通常、私のコーディングでは、「in」句をチェックするための複数の値があります。したがって、上記の構文は理想的ではありません。 Python 変数はアットマーク (@) を使用して参照できます。 プログラムで値を Python リストとして作成し、(@) を付けて使用することもできます。 |
id
#original_ language | #original_title | #人気度 | ##リリース日収益 |
| 実行時間st | 95 | 165000000 | ||
---|---|---|---|---|---|---|---|---|---|
zh 星 |
724.247784 |
2014 年 5 月 11 日 |
675120017 |
169.0 |
関係 |
788 | ##58000000 | 293660
| #zh|
デッドプール | 514.5699562016 年 9 月 2 日 | 108.0 | 関係 | p> |
以上がPandas の SQL クエリ スタイルでデータのサブセットを選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。