Python Pandas Dataframe에서 특정 값 목록에 있는 값을 가진 행 필터링하기
Python Pandas Dataframe에서 특정 값 목록에 있는 값을 가진 행 필터링하기
isin() 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']})
# 값 목록 생성
values = [2, 4]
# 'col1' 열 값이 values에 있는 행 필터링
filtered_df = df[df['col1'].isin(values)]
print(filtered_df)
결과:
col1 col2
1 2 b
3 4 d
설명:
isin()
함수는 데이터프레임 열의 값이 특정 값 목록에 있는지 확인합니다.df['col1'].isin(values)
는 'col1' 열의 값이values
목록에 있는지 True/False 값으로 나타내는 시리즈를 생성합니다.[]
인덱싱을 사용하여 True인 행만 선택하여 새로운 데이터프레임filtered_df
를 만듭니다.
query() 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']})
# 값 목록 생성
values = [2, 4]
# 'col1' 열 값이 values에 있는 행 필터링
filtered_df = df.query('col1 in @values')
print(filtered_df)
col1 col2
1 2 b
3 4 d
query()
함수는 SQL과 유사한 문자열 표현식을 사용하여 데이터프레임을 필터링합니다.col1 in @values
는 'col1' 열 값이values
목록에 있는지 확인하는 조건식입니다.@
기호는query()
함수에 전달되는 값이 Python 객체임을 나타냅니다.
loc 사용:
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']})
# 값 목록 생성
values = [2, 4]
# 'col1' 열 값이 values에 있는 행 필터링
filtered_df = df.loc[df['col1'].isin(values)]
print(filtered_df)
col1 col2
1 2 b
3 4 d
loc
인덱싱을 사용하여 행을 선택하고 열을 선택할 수 있습니다.
주의:
- 위에 제시된 방법 외에도 다양한 방법으로 Pandas 데이터프레임 행을 필터링할 수 있습니다.
- 사용하는 방법은 데이터프레임의 구조와 원하는 결과에 따라 다릅니다.
- Pandas 문서에서 다양한 필터링 방법에 대한 자세한 내용을 참조하십시오.
- [거의 모든 데이터 분석 작업을 해결하는 Pandas 필터
예제 코드: 특정 값 목록에 있는 값을 가진 행 필터링
isin() 사용
import pandas as pd
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
filtered_df = df[df['col1'].isin(values)]
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
query() 사용
import pandas as pd
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
filtered_df = df.query('col1 in @values')
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
loc 사용
import pandas as pd
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
filtered_df = df.loc[df['col1'].isin(values)]
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
- 세 코드 모두 동일한 결과를 출력합니다.
- 어떤 코드를 사용할지는 개인의 선호와 상황에 따라 다릅니다.
isin()
함수는 간결하고 명확하며,query()
함수는 SQL과 유사한 문자열 표현식을 사용하여 유연하게 필터링할 수 있으며,loc
인덱싱은 다양한 조건으로 필터링하고 선택된 열을 조작하는 데 유용합니다.
Pandas Dataframe에서 특정 값 목록에 있는 값을 가진 행 필터링하기: 대체 방법
np.where() 사용:
import pandas as pd
import numpy as np
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
filtered_df = df[np.where(df['col1'].isin(values))]
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
np.where()
함수는 조건에 따라 배열에서 값을 선택하는 데 사용됩니다.np.where()
함수는 True인 위치를 사용하여 원하는 행을 선택합니다.
list comprehension 사용:
import pandas as pd
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
filtered_df = [row for row in df.itertuples() if row[1] in values]
filtered_df = pd.DataFrame(filtered_df, columns=df.columns)
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
list comprehension
은 조건에 따라 리스트를 생성하는 데 사용됩니다.df.itertuples()
는 각 행을 튜플로 반환하는 제너레이터를 생성합니다.row[1]
은 각 행의 두 번째 값인 'col1' 열 값을 나타냅니다.- 조건을 충족하는 행만 포함하는 새 리스트를 생성합니다.
- 새 리스트를 기반으로 새로운 데이터프레임
filtered_df
를 만듭니다.
apply() 함수 사용:
import pandas as pd
# 데이터 생성
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['a', 'b', 'c', 'd', 'e']}
df = pd.DataFrame(data)
# 값 목록
values = [2, 4]
# 필터링
def filter_row(row):
return row['col1'] in values
filtered_df = df.apply(filter_row, axis=1)
filtered_df = filtered_df[filtered_df]
# 결과 출력
print(filtered_df)
col1 col2
1 2 b
3 4 d
apply()
함수는 각 행 또는 열에 함수를 적용하는 데 사용됩니다.filter_row
함수는 'col1' 열 값이values
목록에 있는지 확인하고 True/False 값을 반환합니다.apply()
함수는filter_row
함수를 각 행에 적용하여 True인 행만 포함하는 시리즈를 생성합니다.filtered_df = filtered_df[filtered_df]
는 True인 값만 유지하여 새로운 데이터프레임filtered_df
를 만듭니다.
- 위에 제시된 대체 방법들은 성능 측면에서
isin()
보다 느릴 수 있습니다. - 데이터프레임이 크고 성능이 중요한 경우
isin()
을 사용하는 것이 좋습니다. - 코드 가독성과 유지 관리 용이성을
python pandas dataframe