본문 바로가기
Python/Pandas

Pandas 데이터프레임의 부분 데이터 세트 선택 방법

by 찐남 2021. 8. 14.
본 내용을 보기 전에 Python 사전 준비 및 Python 완전 기초를 먼저 이해하셔야 합니다.
본 포스팅은 pandas 공식 홈페이지를 기반으로 작성하였습니다.

 

이번 포스팅에서 사용할 데이터는 2021.08.13 - [Python/Pandas 기초익히기] - Pandas 표 데이터 입/출력 및 데이터 확인에서 활용한 titanic 승객 데이터를 계속 활용하겠습니다(titanic 승객 데이터의 위의 포스팅에서 다운로드하시면 됩니다.). 

 

import pandas as pd
titanic = pd.read_csv("D:/python_exer/titanic.csv")

 

 

 

 



 

1. 데이터프레임의 부분 데이터 세트 선택 방법

 

1.1. 특정 열(column) 선택

 

 

타이타익 승객 데이터 중에서 나이에 관심이 있어, Age 열만 선택하고 싶으면, 아래와 같이 입력하면 됩니다.

 

ages = titanic["Age"]
print(ages.head())

 

단일 열을 선택하려면 관심 있는 열의 열 이름과 함께 대괄호 []를 사용합니다. DataFrame의 각 열은 Series입니다. 단일 열을 선택하면 반환되는 개체는 pandas Series입니다. 출력 유형을 확인하면 이를 확인할 수 있습니다. 

 

print(type(titanic["Age"]))

 

출력의 모양을 한번 보겠습니다.

 

print(titanic["Age"].shape)

 

DataFrame.shape는 행과 열의 수를 포함하는 pandas Series 및 DataFrame의 속성입니다(

2021.08.13 - [Python/Pandas 기초익히기] - Pandas 표 데이터 입/출력 및 데이터 확인에서 배웠습니다. 속성에는 괄호를 사용하시면 안 됩니다.). pandas Series는 1차원이며 행의 수만 반환합니다. 

 

이번에는 나이와 성별에 관심이 있어, Age 및 Sex 열을 선택하고 싶습니다. 2 개 이상의 열을 선택하고 싶으면 아래와 같이 입력하시면 됩니다.

 

age_sex = titanic[["Age", "Sex"]]
print(age_sex)

 

여러 열을 선택하려면 선택 대괄호 [] 안에 열 이름 리스트를 사용하셔야 합니다(Note: 내부 대괄호는 열 이름이 있는 Python 리스트를 정의하는 반면 외부 대괄호는 이전 예제에서 볼 수 있듯이 pandas DataFrame에서 데이터를 선택하는 데 사용됩니다.)

 

반환된 데이터 유형은 pandas DataFrame입니다.

print(type(titanic[["Age", "Sex"]]))

 

출력 모양도 확인해 보겠습니다.

print(titanic[["Age", "Sex"]].shape)

 

891개의 행과 2개의 열이 있는 DataFrame을 반환했습니다. DataFrame은 행과 열 차원이 모두 있는 2차원임을 기억해야 합니다. 

 

 



 

 

1.2. 특정 행(row) 선택

 

나이가 35세보다 많은 승객들의 데이터만 선택하려면, 아래와 같이 실행하면 됩니다.

 

above_35 = titanic[titanic["Age"] > 35]
print(above_35)

 

조건식에 따라 행을 선택하려면 선택 대괄호 [] 안에 조건을 사용합니다. 선택 대괄호 안에 있는 조건인 titanic["Age"] > 35는 Age 열에 35보다 큰 값이 있는 행을 확인합니다. 선택 대괄호 [] 안에 있는 조건식만 출력해 보겠습니다.

 

print(titanic["Age"] > 35)

 

조건식(>뿐만 아니라 ==, !=, <, <=,…도 작동함)의 출력은 실제로 원래 DataFrame과 동일한 수의 행을 갖는 부울 값(True 또는 False)의 pandas Series입니다. 이러한 일련의 부울 값은 선택 대괄호 [] 사이에 넣어 DataFrame을 필터링하는 데 사용할 수 있습니다. 즉, 값이 True인 행만 선택합니다. 

 

원래 Titanic DataFrame이 891개의 행으로 구성되어 있습니다. 위의 실행 결과 DataFrame의 shape 속성을 확인하여 조건을 만족하는 행의 수를 살펴보겠습니다. 

 

print(above_35.shape)

 

객실 클래스 2와 3의 타이타닉 승객 데이터만 선택하려면, 아래와 같이 실행하시면 됩니다. 

 

class_23 = titanic[titanic["Pclass"].isin([2,3])]
print(class_23.head())

 

조건식과 유사하게 isin() 조건부 함수는 제공된 리스트에 값이 있는 각 행에 대해 True를 반환합니다. 이러한 함수를 기반으로 행을 필터링하려면 선택 대괄호 [] 안에 조건부 함수를 사용합니다. 이 경우 선택 대괄호 안의 조건인  titanic["Pclass"].isin([2, 3])은 Pclass 열이 2 또는 3인 행을 확인합니다. 위의 내용은 클래스가 2 또는 3인 행으로 필터링하고 두 명령문을 | (또는) 연산자로 조건을 거는 결과와 동일합니다. 아래 예시를 보겠습니다.

 

class_23 = titanic[(titanic["Pclass"] == 2) | (titanic["Pclass"] == 3)]
print(class_23.head())

(Note: 여러 조건문을 결합할 때 각 조건은 괄호()로 묶어야 합니다. 또한 or/and를 사용할 수 없고, | 및 & 연산자를 사용해야 합니다.)

 

 

나이가 알려진(=Age 열의 값이 NA(missing)이 아닌) 승객 데이터로 분석을 하고 싶은 경우에는 아래와 같이 실행하시면 됩니다. 

 

age_no_na = titanic[titanice["Age"].notna()]
print(age_no_na)

 

notna() 조건부 함수는 값이 Null 값이 아닌 각 행에 대해 True를 반환합니다. 따라서 선택 대괄호 []와 결합하여 데이터 테이블을 필터링할 수 있습니다. 처음 5줄은 여전히 ​​동일한 값이므로 실제로 변경된 사항이 궁금할 수 있습니다. 확인하는 한 가지 방법은 모양이 변경되었는지 확인하는 것입니다. 

 

print(age_no_na.shape)

 

1.3. 특정 행(row)과 열(column) 선택 방법

 

 

35세 이상 승객의 이름이 알고 싶은 경우, 아래와 같이 실행하시면 됩니다.

 

adult_names = titanic.loc[titanic["Age"] >= 35, "name"]
print(adult_names.head())

 

이 경우 행과 열의 하위 집합이 한 번에 만들어지고 선택 대괄호 []를 사용하는 것만으로는 더 이상 충분하지 않습니다. loc/iloc 연산자가 선택 대괄호 [] 앞에 필요합니다. loc/iloc을 사용할 때 쉼표 앞부분은 원하는 행이고, 쉼표 뒤 부분은 선택하려는 열입니다. 행 이름, 열 라벨 또는 조건식을 사용할 때 선택 대괄호 [] 앞에 loc 연산자를 사용해야 합니다. 쉼표 앞과 뒤 부분 모두에 단일 라벨, 라벨 리스트, 라벨 조각, 조건식 또는 콜론을 사용할 수 있습니다. 콜론을 사용하면 모든  또는 열을 선택하도록 지정합니다. 

 

 

10~25행과 3~5열을 선택하고 싶습니다. 아래와 같이 실행하시면 됩니다.

 

print(titanic.iloc[9:25, 2:5])

 

다시 말하지만, 행과 열의 하위 집합이 한 번에 만들기 위해서는 선택 대괄호 []를 사용하는 것만으로는 충분하지 않습니다. 테이블에서의 위치에 따라 특정 행 및/또는 열에 특히 관심이 있는 경우 선택 대괄호 [] 앞에 iloc 연산자를 사용합니다. 잊지 마세요!

 

loc 또는 iloc을 사용하여 특정 행 및/또는 열을 선택할 때 선택한 데이터에 새 값을 할당할 수 있습니다. 예를 들어, 4 번째 열의 처음 3개 요소에 "anonymous"이라는 이름을 할당하려면 아래와 같이 실행하시면 됩니다.

 

titanic.iloc[0:3, 2] = "anonymous"
print(titanic.iloc[0:5,0:4].head())

 

2. 기억하세요!

 

  • 데이터의 하위 부분 집합을 선택할 때 대괄호 []를 사용합니다.
  • 대괄호 안에는 단일 열/행 레이블, 열/행 레이블 리스트, 레이블 슬라이스, 조건식 또는 콜론을 사용할 수 있습니다.
  • 행 및 열 이름을 사용할 때는 loc을 사용하여 특정 행과 열 선택

 

 

 

반응형

댓글