2023년 6월 업데이트

 

안녕하세요. SQLER의 코난 김대우입니다. 

이번 강좌에서는, Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query)를 진행토록 하겠습니다.

예제 노트북 파일 : 5. Pandas DataFrame에 질의(Query)

 

SQLER에서 진행되는 전체 Python / 머신러닝 강좌 목록

 

코드를 실행하기 위해서는, vscode에서 새로운 파일을 만들고 강좌 내용을 단계별로 copy&paste 해서 실행하시면 됩니다. 또는, Jupyter notebook을 실행하고 단계별로 실행하셔도 됩니다.

예를 들어, 5_pandas_query.ipynb를 생성하고 vscode에서 실행하면, Jupyter notebook이 실행됩니다.(vscode에서 실행도 가능하며, 웹브라우저에서도 실행 가능합니다.)

또는, github 리포지토리를 clone 하신 후, vscode나 Jupyter notebook에서, 위의 노트북 파일을 열면 됩니다. 
 

상세한 환경 구성이 필요하시다면, 개발자 커뮤니티 SQLER.com - Python 초급 강좌 목차 - 1. Python 개발 환경 구성 문서를 참조해 WSL, vscode, conda, jupyter notebook 설정을 모두 먼저 완료하시길 권장해 드립니다.

 

 

 

TL;DR

Pandas iloc 및 loc을 사용하여 DataFrame을 쿼리합니다. loc 속성은 열 이름을 지정하여 특정 열과 행을 반환하는 데 사용되고 iloc 속성은 열 인덱스 위치를 지정하여 특정 행과 열을 반환하는 데 사용됩니다. 단일 열을 쿼리하려면 DataFrameName['columnName']을, 여러 열을 쿼리하려면 DataFrameName[['FirstColumnName', 'SecondColumnName', ...]]을 사용합니다.
 

 

Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query)

이번 내용은 DataFrame에 대해 query 하는 강좌입니다. DataFrame에서 필요한 컬럼들을 가져올 경우 사용되는 iloc와 loc에 대해서 진행합니다. SQL에 익숙하신 분들이라면, SELECT 절의 컬럼 선택을 떠올리면 이해하기 쉬우실 거에요.

 

pandas DataFrame 쿼리

pandas DataFrame은 2차원 테이블 형식의 데이터를 저장하기 위한 구조입니다.

 

일반적인 속성(property)

  • loc column 이름을 지정하여 특정 column과 row를 반환합니다.
  • iloc coulmn 인덱스 위치를 지정하여 특정 row와 column을 반환합니다.

 

DataFrame에서 데이터의 일부를 리턴하는 것을 데이터 슬라이싱(slicing) 또는 다이싱(dicing)이라고 합니다.

먼저, 예제로 사용할 데이터를 생성하고 조회해 볼게요.

 

import pandas as pd

airports = pd.DataFrame([
                        ['Seatte-Tacoma', 'Seattle', 'USA'],
                        ['Dulles', 'Washington', 'USA'],
                        ['London Heathrow', 'London', 'United Kingdom'],
                        ['Schiphol', 'Amsterdam', 'Netherlands'],
                        ['Changi', 'Singapore', 'Singapore'],
                        ['Pearson', 'Toronto', 'Canada'],
                        ['Narita', 'Tokyo', 'Japan']
                        ],
                        columns = ['Name', 'City', 'Country']
                        )
airports

결과는 이전 강좌들에서 보신 것과 같은 위의 2차원 배열 형태로 DataFrame 결과가 출력됩니다.

 

하나의 컬럼을 리턴

리턴할 column 이름을 지정합니다.

  • DataFrameName['columnName']
airports['City']

 

=== 결과 === 

0       Seattle
1    Washington
2        London
3     Amsterdam
4     Singapore
5       Toronto
6         Tokyo
Name: City, dtype: object

SQL 쿼리로 표현하면 SELECT columnName FROM DataFrame 정도가 되겠네요.

 

여러 column들을 리턴

반환하려는 열 리스트를 코드에 추가합니다.

  • DataFrameName[['FirstColumnName', 'SecondColumnName', ...]]
airports[['Name', 'Country']]

=== 결과 ===

  Name Country
0 Seatte-Tacoma USA
1 Dulles USA
2 London Heathrow United Kingdom
3 Schiphol Netherlands
4 Changi Singapore
5 Pearson Canada
6 Narita Japan

네, 두 개의 컬럼을 DataFrame에서 가져오는 처리입니다. 여러 개의 컬럼을 계속 컬럼명을 나열하면 가능하겠죠.

 

iloc를 사용하여 반환할 row와 column 설정

iloc[rowscolumns]를 사용하면, row 및 column index 위치의 row 또는, column 그룹을 가져올 수 있습니다.

리턴할 특정 row와 column을 지정합니다.

  • 첫 번째 row는 0 입니다.
  • 첫 번째 column은 0 입니다.
# 첫 row와 첫 column의 값을 리턴
airports.iloc[0,0]

 

=== 결과 ===

'Seatte-Tacoma'

 

i의 의미는 index를 의미하고, list 등의 여러 Python 데이터형에서 보신 것처럼, 서수형으로 position의 정보를 가져옵니다.

 

# 세 번째 row와 세 번째 column을 리턴
airports.iloc[2,2]

=== 결과 ===

'United Kingdom'

 

":"을 지정해서 모든 row들과 column들을 리턴 가능합니다.

airports.iloc[:,:]

=== 결과 ===

  Name City Country
0 Seatte-Tacoma Seattle USA
1 Dulles Washington USA
2 London Heathrow London United Kingdom
3 Schiphol Amsterdam Netherlands
4 Changi Singapore Singapore
5 Pearson Toronto Canada
6 Narita Tokyo Japan

 

 

row 범위 또는 column range를 조회할 수 있습니다.

  • [x:y]는 x부터 y까지의 row 또는 column을 리턴합니다.
# 첫 2 row와 모든 column을 리턴
airports.iloc[0:2,:]
 

=== 결과 ===

  Name City Country
0 Seatte-Tacoma Seattle USA
1 Dulles Washington USA

로우는 0부터 2까지 즉, 0번과 1번을 가져오고, 컬럼은 ":" 이기 때문에 전체를 가져옵니다.

 

# 모든 row와 첫 두 개의 column을 리턴
airports.iloc[:,0:2]

=== 결과 ===

  Name City
0 Seatte-Tacoma Seattle
1 Dulles Washington
2 London Heathrow London
3 Schiphol Amsterdam
4 Changi Singapore
5 Pearson Toronto
6 Narita Tokyo

 

 

row 리스트 또는 column 리스트를 조회할 수 있습니다.

  • [x,y,z]는 row 또는 column x, y 및 z를 반환합니다.
airports.iloc[:,[0,2]]

=== 결과 ===

  Name Country
0 Seatte-Tacoma USA
1 Dulles USA
2 London Heathrow United Kingdom
3 Schiphol Netherlands
4 Changi Singapore
5 Pearson Canada
6 Narita Japan

 

loc를 사용하여 이름으로 column을 조회

column의 index 위치 대신 column 이름을 조회하려면 iloc 대신 loc 사용

airports.loc[:,['Name', 'Country']]

=== 결과 ===

  Name Country
0 Seatte-Tacoma USA
1 Dulles USA
2 London Heathrow United Kingdom
3 Schiphol Netherlands
4 Changi Singapore
5 Pearson Canada
6 Narita Japan

 

수고하셨습니다.

 

☑️ 챗GPT 활용: 
airports = pd.DataFrame([
                        ['Seatte-Tacoma', 'Seattle', 'USA'],
                        ['Dulles', 'Washington', 'USA'],
                        ['London Heathrow', 'London', 'United Kingdom'],
                        ['Schiphol', 'Amsterdam', 'Netherlands'],
                        ['Changi', 'Singapore', 'Singapore'],
                        ['Pearson', 'Toronto', 'Canada'],
                        ['Narita', 'Tokyo', 'Japan']
                        ],
                        columns = ['Name', 'City', 'Country']
                        )

 

위 내용을 프롬프트에 질문하고 이어서 


"airports 데이터프레임에서 상위 3개의 행을 가져오는 방법을 알려줘" 질문 수행

 

 

파이썬 강좌 책 구매

강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다. 

 

책구매 링크: 챗GPT와 함께하는 파이썬 & 머신러닝 코딩 마스터 

파이썬-책구매링크.png

 

참고자료

개발자 커뮤니티 SQLER.com - Python 무료 강좌 - 기초, 중급, 머신러닝

c9-python-getting-started/even-more-python-for-beginners-data-tools/05 - Query a pandas Dataframe at master · CloudBreadPaPa/c9-python-getting-started (github.com)

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 21874
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12245
» Python 머신러닝 강좌 - 5. Pandas DataFrame에 질의(Query) 코난(김대우) 2021.01.07 254
13 Python 머신러닝 강좌 - 4. Pandas DataFrame file 코난(김대우) 2021.01.07 213
12 Python 머신러닝 강좌 - 3. Pandas 소개 file 코난(김대우) 2021.01.07 295
11 Python 머신러닝 강좌 - 2. Anaconda와 Conda 구성 file 코난(김대우) 2021.01.06 308
10 Jupyter notebook 단축키 등의 cheat sheet file 코난(김대우) 2021.01.06 324
9 Python 머신러닝 강좌 - 1. 주피터 노트북(Jupyter Notebook) 구성 file 코난(김대우) 2021.01.06 876
8 2021년 머신러닝과 인공지능(AI) 트렌드 - MLaaS (서비스로의 머신러닝) file 코난(김대우) 2020.12.29 382
7 머신러닝을 시작하는 개발자를 위한 - (4) 2021년의 ML Trend - MLaaS와 MLOps(Machine Learning + DevOps) 코난(김대우) 2020.12.28 386
6 머신러닝을 시작하는 개발자를 위한 - (3) 우리 개발자가 머신러닝을 해야 하는 이유는? 코난(김대우) 2020.12.28 230
5 머신러닝을 시작하는 개발자를 위한 - (2) 머신러닝 서비스/프레임워크/툴킷 분류 및 전체 개발 흐름 코난(김대우) 2020.12.28 383
4 머신러닝을 시작하는 개발자를 위한 - (1) 머신러닝 용어정리, 분류부터 MLOps까지 file 코난(김대우) 2020.12.28 641
3 Deep Learning 개발 중 현재 GPU를 점유하는 pid 및 GPU 사용량 확인하는 방법 file 코난(김대우) 2020.12.26 282
2 GPU 머신에서 Machine Learning을 수행할때 Deep Learning 툴킷 & 패키지들이 GPU를 이용하는지 체크하는 python 코드 코난(김대우) 2020.12.21 216
1 머신러닝 새로운 글 코난(김대우) 2020.12.18 254





XE Login