Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

Pandas의 SQL 쿼리 스타일에서 데이터 하위 집합을 선택하는 방법은 무엇입니까?

<시간/>

소개

이 포스트에서는 Pandas를 사용하여 SQL 스타일 필터링으로 데이터 분석을 수행하는 방법을 보여 드리겠습니다. 기업 데이터의 대부분은 SQL이 데이터를 검색하고 조작해야 하는 데이터베이스에 저장됩니다. 예를 들어, Oracle, IBM, Microsoft와 같은 회사에는 자체 SQL 구현이 포함된 자체 데이터베이스가 있습니다.

데이터 과학자는 데이터가 항상 CSV 파일에 저장되지 않기 때문에 경력의 어느 단계에서 SQL을 다루어야 합니다. 저는 개인적으로 회사 데이터의 대부분이 Oracle에 저장되기 때문에 Oracle을 사용하는 것을 선호합니다.

시나리오 – 1 아래 조건의 영화 데이터 세트에서 모든 영화를 찾는 작업이 주어졌다고 가정합니다.

  • 영화의 언어는 영어(en) 또는 스페인어(es)여야 합니다.
  • 영화의 인기도는 500에서 1000 사이여야 합니다.
  • 영화의 상태가 공개되어야 합니다.
  • 투표 수는 5000보다 커야 합니다. 위 시나리오의 경우 SQL 문은 다음과 같습니다.
SELECTFROM WHEREtitle AS movie_title,original_language AS movie_language,popularityAS movie_popularity,statusAS movie_status,vote_count AS movie_vote_count movies_dataoriginal_languageIN ('en', 'es')AND status=('출시')AND 500AND0505 AND 100 사이의 인기도 사전> 

요구 사항에 대한 SQL을 보았으므로 이제 pandas를 사용하여 이 작업을 단계별로 수행해 보겠습니다. 두 가지 방법을 알려드리겠습니다.

방법 1:- 부울 인덱싱

1. Movies_data 데이터셋을 DataFrame에 로드합니다.

판다를 pd 영화로 가져오기 =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")

각 조건에 대해 변수를 할당하십시오.

언어 =[ "en" , "es" ] condition_on_languages ​​=영화 . original_language . isin ( 언어 ) condition_on_status =영화 . status =="Released"condition_on_popularity =영화 . 인기 . (500, 1000) condition_on_votecount =영화 사이. 투표 수> 5000

3. 모든 조건(부울 배열)을 함께 결합합니다.

final_conditions =( condition_on_languages ​​&condition_on_status &condition_on_popularity &condition_on_votecount )columns =[ "title" , "original_language" , "status" , "popularity" , "vote_count" ]# 모든 영화를 함께 클럽 . 위치 [ final_conditions , 열 ]


<일>상태
제목
original_language
인기
vote_count
95 인터스텔라
ko
출시
724.247784
10867
788데드풀
ko
출시
514.569956
10995


방법 2:- .query() 방법.

.query() 메서드는 데이터를 필터링하는 SQL where 절 스타일 방식입니다. 조건을 이 메서드에 문자열로 전달할 수 있지만 열 이름에는 공백이 없어야 합니다.

열 이름에 공백이 있으면 python 바꾸기 기능을 사용하여 밑줄로 바꾸세요.

내 경험에 따르면 더 큰 DataFrame에 적용할 때 query() 메서드가 이전 메서드보다 빠릅니다.

판다를 pd로 가져오기 영화 =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 인기도> 500 ""그리고 인기도 <1000""and vote_count> 5000") final_result =영화 . 쿼리( final_conditions )final_result


<머리><번째>
<일>예산
아이디
<일>수익
<일>일
original_language
original_title
인기
출시_날짜
런타임
95
165000000
157336
ko
인터스텔라
724.247784
2014년 5월 11일
675120017
169.0

788
58000000
293660
ko
데드풀
514.569956
2016년 9월 2일
783112979
108.0


내 코딩에는 "in" 절에서 확인할 여러 값이 더 많이 있습니다. 따라서 위의 구문은 작업하기에 이상적이지 않습니다. at 기호(@)를 사용하여 Python 변수를 참조할 수 있습니다.

프로그래밍 방식으로 값을 파이썬 목록으로 생성하고 (@)와 함께 사용할 수도 있습니다.

movie_languages ​​=[ 'en' , 'es' ]final_conditions =("original_language in @movie_languages ​​""and status =='Released' ""and 인기도> 500 ""그리고 인기도 <1000""그리고 vote_count> 5000" )final_result =영화 . 쿼리( final_conditions )final_result


<머리><번째>
<일>예산
아이디
<일>수익
<일>일
original_language
original_title
인기
출시일
런타임
95
165000000
157336
ko
인터스텔라
724.247784
2014년 5월 11일
675120017
169.0

788
58000000
293660
ko
데드풀
514.569956
2016년 9월 2일
783112979
108.0