판다스에서 특정 열의 값을 기준으로 데이터 프레임의 행을 선택하는 방법
데이터 분석에서는 특정 열의 값을 기준으로 필요한 행을 선택하는 것이 자주 요구됩니다. 이러한 작업은 데이터의 특성에 따라 다양한 필터링 방식으로 이루어질 수 있습니다. 판다스는 이러한 행 선택 작업을 매우 간편하게 처리할 수 있도록 다양한 기능을 제공합니다.
예시 생성
아래의 예시 데이터 프레임을 활용하여, 특정 열의 값을 기준으로 데이터를 필터링하는 여러 방법을 설명하겠습니다.
import numpy as np
data = {
'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'two', 'three', 'four', 'five', 'six'],
'C': [0, 1, 2, 3, 4, 5, 6, 7],
'D': [0, 2, 4, 6, 8, 10, 12, 14]
}
df = pd.DataFrame(data)
특정 열의 값이 지정한 단일 값과 같은 행을 선택하는 방법
특정 열의 값이 특정한 단일 값과 같은 행을 선택하려면, == 연산자나 eq 함수를 사용하여 조건문을 생성해 불리언 인덱싱을 수행할 수 있습니다.
A 열의 값이 'foo'인 행을 모두 선택하겠습니다.
# A 열의 값이 'foo'인 행을 모두 선택
df[df['A'] == 'foo']
특정 열 값이 지정한 값과 다른 행을 선택하는 방법
특정 열의 값이 주어진 값과 다른 행을 선택하려면, != 연산자 또는 ne 함수를 사용합니다.
B 열의 값이 'one'이 아닌 행을 모두 선택하겠습니다.
# B 열의 값이 'one'이 아닌 행을 모두 선택
df[df['B'] != 'one']
여러 조건을 결합하여 행을 선택하는 방법
여러 조건을 결합하여 행을 선택할 때는 여러 조건문을 생성한 뒤 비트 연산자인 & (and의 기능) 및 | (or의 기능)를 사용합니다. 논리 연산자인 and와 or는 사용할 수 없다는 점과 각 조건문을 생성할 때 연산자를 사용하면 각각을 소괄호로 묶어주는 것을 잊지 말아야 합니다.
A 열의 값이 'foo'이면서 B 열의 값이 'one'이 아닌 행을 선택하겠습니다.
# A 열이 'foo'이면서 B 열이 'one'이 아닌 행을 선택
df[(df['A'] == 'foo') & (df['B'] != 'one')]
이러한 방식은 복잡한 조건을 사용해 데이터를 필터링할 때 매우 유용합니다. 하지만 여러 조건이 결합하면 코드의 가독성이 떨어질 수 있습니다. 따라서 조건문이 복잡해질 경우 각 조건을 별도의 변수로 분리하는 것이 좋습니다. 이렇게 하면 코드의 가독성이 향상되고, 디버깅과 수정이 훨씬 용이해집니다. 또한 조건을 변수로 지정해 두면 중복된 조건을 재사용할 수 있는 장점도 있습니다.
# A 열이 'foo'이면서 B 열이 'one'이 아닌 행을 선택
cond1 = df['A'] == 'foo' # A 열에서 값이 'foo'인 행을 찾는 조건문
cond2 = df['B'] != 'one' # B 열에서 값이 'one'이 아닌 행을 찾는 조건문
df[cond1 & cond2] # 두 조건을 모두 만족하는 행을 필터링
복수의 특정 값과 동일한 행을 선택하는 방법
특정 열에서 복수의 값을 추출하고자 할 때는 isin 함수를 사용합니다. 이 함수는 주어진 값 목록에 속하는 행을 선택하는 데 매우 효율적입니다.
B 열의 값이 'one', 'two', 'three' 중 하나인 행을 선택하겠습니다.
# B 열이 'one', 'two', 'three' 중 하나인 행을 선택
df[df['B'].isin(['one', 'two', 'three'])]
이 방법은 특정 열에서 복수의 값을 동시에 필터링할 때 활용됩니다. 선택할 값들이 여러 개일 때 isin 함수를 사용하는 것이 매우 간단하고 직관적인 해결책을 제공합니다.
교보문고 구매 페이지, 알라딘 구매 페이지, yes24 구매 페이지
유튜브에서 판다스 강의 중입니다.
https://www.youtube.com/@KimPandas
'판다스 > 중급 판다스' 카테고리의 다른 글
[pandas] 두 데이터 프레임에 공통으로 존재하는 행 추출하기 (0) | 2024.10.16 |
---|---|
[pandas] period 자료형의 장점 (0) | 2024.10.16 |
[pandas] 영업일(business day)을 배열로 생성하는 방법 (0) | 2023.08.28 |
[pandas] 멀티 인덱스에서 특정 값 수정하기 (0) | 2023.08.23 |
[pandas] 범주형 데이터를 정수로 코드화하는 다양한 방법 (0) | 2023.05.27 |