ホームページ  >  記事  >  データベース  >  Pandas の SQL クエリ スタイルでデータのサブセットを選択するにはどうすればよいですか?

Pandas の SQL クエリ スタイルでデータのサブセットを選択するにはどうすればよいですか?

WBOY
WBOY転載
2023-08-31 10:13:101147ブラウズ

如何在 Pandas 的 SQL 查询样式中选择数据子集?

はじめに

この記事では、Pandas を使用して SQL スタイルのフィルタリングによるデータ分析を実行する方法を説明します。ほとんどの企業データはデータベースに保存されており、取得および操作には SQL が必要です。たとえば、Oracle、IBM、Microsoft などの企業は、独自のデータベースと独自の SQL 実装を持っています。

データは常に CSV ファイルに保存されるわけではないため、データ サイエンティストはキャリアのどこかの時点で SQL を扱う必要があります。会社のデータのほとんどは Oracle に保存されているため、私は個人的に Oracle を使用することを好みます。

シナリオ – 1 次の条件を持つすべての映画をデータセットから検索するタスクがあるとします。

  • 映画の言語は英語 (en) またはスペイン語 (es) である必要があります。
  • 映画の人気は 500 ~ 1000 の間である必要があります。
  • ムービーのステータスは公開済みである必要があります。
  • 投票数は 5000 より大きくなければなりません。上記のシナリオの場合、SQL ステートメントは次のようになります。
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: ブール インデックス

1.movi​​es_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 ]

タイトル原語 ステータス人気度投票数##95星##788デッドプール

zh

公開

724.247784

10867

## zh

リリース済み

514.569956

10995

方法 2:- .query() メソッド。

.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

95157336zh 星724.2477842014 年 5 月 11 日78858000000#デッドプール

#514.569956

movie_languages = [ &#39;en&#39; , &#39;es&#39; ]
final_conditions = (
"original_language in @movie_languages "
"and status == &#39;Released&#39; "
"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

##675120017

##169.0

関係

293660

zh

9 月 2 日2016

783112979

p>

108.0

関係

# 他にもたくさんありますが、通常、私のコーディングでは、「in」句をチェックするための複数の値があります。したがって、上記の構文は理想的ではありません。 Python 変数はアットマーク (@) を使用して参照できます。

プログラムで値を Python リストとして作成し、(@) を付けて使用することもできます。

予算

id##リリース日収益実行時間st 95 157336#zh514.5699562016 年 9 月 2 日

783112979

108.0関係
#original_ language

#original_title

#人気度

165000000

zh

724.247784

2014 年 5 月 11 日

675120017

169.0

関係

788

##58000000

293660

デッドプール

p>

以上がPandas の SQL クエリ スタイルでデータのサブセットを選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。