본문 바로가기

Python/Python 기초 연습

[Python] Pandas Query 정복 - 실전 데이터 활용(EPL 리그)

반응형

 

 

※ 참고 사항 - 활용 데이터 셋은 EPL 프로 축구 리그 데이터

 

 

데이터 셋 원본 다운로드 페이지로 이동하기

 

 

축구에 관심이 있으신 분들이 보면 재미있게 데이터 분석을 공부할 수 있는 좋은 데이터셋입니다. 또한 실전 데이터라고 봐도 무방할 만큼 아주 좋은 데이터셋입니다. 

 

 

원래 데이터가 생긴 모습

 

 


 

1. Query 활용법 요약 - 1분도 길다. 결론부터!!

 

Query 기능 설명 코드 논리 및 예시
1. 비교 연산자 검색  <, >, ==, != 등을 활용한 데이터 검색 df.query(' column 비교연산자 숫자 ')
e.g. df.query(' col !=  10')
2. in 논리 검색 in, not in 을 활용한 데이터 검색 df.query('column == [원하는 조건]')
df.query('column == ["1","fj10","asd","b" ]')
3. 인덱스 기준 검색 행(row) number을 기준으로 검색 df.query('index 비교연산자 숫자')
e.g. df.query('index < 10')
4. 논리 연산 검색 and, or, not 등을 활용한 검색 df.query('원하는 조건 or/and 원하는 조건')
e.g. df.query('team == "Liverpool" and jerseyno == 10')
5. 문자열을 통한 검색 특정 문자가 포함 되어있는가 기준 df.query(' 컬럼명.str.contains("찾는 문자")')
df.query(' 컬럼명.str.startswith("찾는 문자")')
df.query(' 컬럼명.str.endswith("찾는 문자")')

 

 

 


 

2. Query 기능별 상세 정보

 

(1) 비교 연산자 검색 - 등호 & 부등호 

- 등호: ==, !=

- 부등호: <, >, <=, >=

- 논리 : df.query(' 컬럼명 비교 연산자 기준 ')

- 코드 활용 예시

   Q1. 첼시 선수만 추출하고 싶다면?

   Q2. 이번 시즌 10골 이상 넣은 선수만 추출하고 싶다면?

1
2
3
4
5
## Q1 Code
r1.query('team == "Chelsea"')
 
## Q2 Code
r1.query('goals >= 10')
cs

 

등호 예시. 첼시 선수만 추출

 

(2) in 논리 검색

- 코드 논리

  방법1. query(' 컬럼명 == [원하는 조건 리스트] ')

  방법2. query(' 컬럼명 in [원하는 조건 리스트] ')

 

- 코드 활용 예시

  Q1. 미드필더와 수비스만 보고 싶다면?

1
2
3
4
5
6
## 기본적인 in 활용법
r1.query('position in ["Defender", "Midfielder"]')
 
 
## ==을 활용한 in 
r1.query('position == ["Defender", "Midfielder"]')
cs

 

 

 


 

(3) 인덱스(Row, Index) 기준 검색

- 코드 논리

  방법1. query(' 컬럼명 == [원하는 조건 리스트] ')

  방법2. query(' 컬럼명 in [원하는 조건 리스트] ')

 

- 코드 활용 예시

  Q1. 특정 Row에 있는 선수가 궁금하다면?

  Q2. 20골 이상 넣은 선수는? - Set Index 함수 동시 활용

 

1
2
3
4
5
6
## index의 기본 논리
r1.query('index >= 20')
 
 
## Set Index를 활용하면 원하는 정보를 더 쉽게 찾을 수 있어요
r1.set_index('goals').query('index >= 20')
cs

 

query - index 기준 검색
query - index 기준 검색2


 

 

(4) 논리 연산 - or, and, not

- 코드 논리

  AND 검색. query(' 컬럼명1 원하는 조건 and 컬럼명2 원하는 조건')

            → and 논리는 "and" 혹은 "&"활용하시면 됩니다. 

 

  OR 검색. query(' 컬럼명1 원하는 조건 or 컬럼명2 원하는 조건')

            → or 논리는 "or" 혹은 " | "활용하시면 됩니다. 

 

  Not 검색. query(' 컬럼명 not in 원하는 조건 ')

            → not은 반드시 소문자로 해주셔야 합니다. 

 

- 코드 활용 예시

  Q1. 이번 시즌 3골 이상 넣고 퇴장도 당한 선수가 궁금하다면?-AND 활용 예시

  Q2. 이번 시즌 한 번이라도 카드를 받은 선수가 궁금하다면?-OR 활용 예시

  Q3. 특정 팀들 이외의 선수를 조회하고 싶다면?-NOT 활용 예시

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
## AND 조건 활용 예시
r1.query('goals >= 3 and redcards >= 1')
 
r1.query('goals >= 3 & redcards >= 1')
 
 
## or 조건 활용 예시
r1.query('yellowcards >= 1 or redcards >= 1')
 
r1.query('yellowcards >= 1 | redcards >= 1')
 
 
## not 조건 활용 예시
r1.query('team not in ["Liverpool", "Everton"]')
 
 
cs

 

 

query - and 활용

 

 

 

query - or 활용


(5) 문자열(String)을 통한 검색

- 논리

  함수1. 특정 문자열의 포함 

             query( ' 컬럼명.str.contains("문자열") ' )

 

  함수2. 특정 문자로 시작하는 데이터 

             query( ' 컬럼명.str.startswith("문자열") ' )

 

  함수3. 특정 문자로 끝나는 데이터 query

             query( ' 컬럼명.str.endswith("문자열") ' )

 

- 코드 활용 예시

  Q1. sal이 들어간 선수 이름이 정확이 기억이 나지 않는다면?

  Q2. Owen으로 시작하는 선수들이 궁금하다면?

  Q3. Mata로 이름이 끝나는 선수가 궁금하다면?

 

1
2
3
4
5
6
7
8
9
10
11
 
## Q1.문자열 포함 검색 - query(' column.str.contains("string") ')
r1.query('player.str.contains("Sal")', engine = 'python')
 
 
## Q2. 시작 문자열 검색 - query(' column.str.startswith("string") ')
r1.query('player.str.startswith("Owen")', engine = 'python')
 
## 끝 문자열 검색 - query(' column.str.endswith("string") ')
r1.query('player.str.endswith("Mata")', engine = 'python')
 
cs

 

 

query - str.contains
query - str.startswith

 

query - str.endswith

 

 


 

※ Type Error발생시 대처 방법 - engin = 'python'을 시도해보자

TypeError: 'Series' objects are mutable, thus they cannot be hashed
 
query 문 안에서 string 값으로 문자열을 찾을 때 간혹 Type Error가 발생할 수도 있다. 

 

 

이럴 때는 engine = 'pyhon'을 입력하면 자동으로 해결이 된다. (아마도 default 값이 c여서 hash가 안 되는 듯 하다.)

 

 

반응형