본문 바로가기

Python/Pandas

ChatGPT로 Python pandas 알아보기 (3):데이터 선택 및 필터링

반응형

ChatGPT로 Python pandas 알아보기 (3):데이터 선택 및 필터링

이번 포스트에서는 ChatGPT로 pandas에서 데이터 선택 및 필터링 관련된 내용을 답변 받아서 해당 내용을 정리해 보았다.
역시 ChatGPT의 플러그인인 Noteable을 함께 사용했으며, 간단한 샘플 코드와 함께 알아보자.
우선 샘플 데이터로 사용할 데이터프레임은 아래와 같다.
import pandas as pd
data = {
    '이름': ['철수', '영희', '민수', '수진', '호영'],
    '나이': [28, 24, 22, 32, 27],
    '성별': ['남', '여', '남', '여', '남'],
    '도시': ['서울', '대전', '부산', '광주', '서울']
}

df = pd.DataFrame(data)
1. Column 선택하기
1.1 단일 Column 선택
대괄호([])와 Column 이름 사용한다.
name = df['이름']
DataFrame.ColumnName 형식으로도 사용이 가능하다.
name = df.이름
1.2 다중 Columns 선택
대괄호 안에 리스트로 Column 이름들을 넣어서 선택할 수 있다.
subset = df[['이름', '나이']]
2. Row 선택하기
2.1 loc 사용
loc 메서드레이블(label)을 기반으로 데이터를 선택할 수 있다.
레이블은 인덱스 라벨을 의미하며, 숫자가 아닐 수도 있다.
loc 메서드를 사용하여 행을 선택할 때는 인덱스 라벨을 사용한다.
현재 샘플 데이터상에서는 index의 레이블이 없어서 index로 출력해볼 수 있다.
row = df.loc[2]
rows = df.loc[1:3]
만약 데이터프레임에 index를 이름으로 주고 하게 된다면, 아래처럼 사용할 수 있다.
new_df = df.set_index('이름')
new_df.loc['철수']
만약 인덱스가 '철수'인 데이터부터 '민수'인 데이터까지 출력하고자 한다면,
new_df.loc['철수':'민수']
2.2 iloc 사용
iloc 메서드정수 기반의 위치 인덱싱(integer-location based indexing)을 사용한다.
즉, 행의 위치(0부터 시작하는 정수)를 기반으로 데이터를 선택한다.
row = df.iloc[2]
rows = df.iloc[1:3]
3. Column과 Row 동시 선택
loc 또는 iloc를 사용하여 Column과 Row를 동시에 선택할 수 있다.
selected = df.loc[1:3, ['이름', '나이']]
selected = df.iloc[1:3, 0:2]
4. 조건에 따른 필터링
Bollean 인덱싱을 활용하여 특정 조건을 만족하는 데이터만 선택할 수 있다.
above_25 = df[df['나이'] >= 25]
in_seoul = df[df['도시'] == '서울']
above_25_in_seoul = df[(df['나이'] >= 25) & (df['도시'] == '서울')]
✔ 논리 연산자 (오퍼레이터)
비교 연산자
==동등 비교
!=부등 비교
>크다
<작다
>=크거나 같다
<=작거나 같다
논리 연산자
&AND 연산
|OR 연산
~NOT 연산
pandas에서는 여러 조건을 조합할 때 일반적인 논리 연산자 and, or 대신 &, |를 사용해야 한다.
이 때 괄호를 사용하여 조건을 명확히 해야 한다.
# 올바른 사용 예
filtered_data = df[(df['나이'] > 30) & (df['도시'] == '서울')]

# 잘못된 사용 예 (조건마다 소괄호 사용해야함)
filtered_data = df[df['나이'] > 30 and df['도시'] == '서울']
이상으로 pandas에서의 데이터프레임의 데이터 선택 및 필터링에 대해 살펴보았다.
간단한 예시와 기본적인 내용만 학습을 했는데, 다음에는 필터링을 위한 몇 가지 메서드에 대해서 한번 알아볼까 한다.
pandas를 처음 배웠을 때 여러 조건을 추가해서 필터링을 거는데 소괄호를 꼭 해야 한다는 사실을 몰라서 한참 헤맨 적이 있다.
그때도 이렇게 공부를 했더라면... 그렇게 시간을 버리진 않았을 텐데... 😐
반응형

loading