본 내용을 보기 전에 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을 사용하여 특정 행과 열 선택
'Python > Pandas' 카테고리의 다른 글
Pandas 활용 요약통계량 생성하기 (0) | 2021.08.17 |
---|---|
Pandas 신규 Column 생성 (0) | 2021.08.16 |
Pandas에서 플롯 생성 방안 (0) | 2021.08.15 |
Pandas 표 데이터 입/출력 및 데이터 확인 (0) | 2021.08.13 |
Pandas가 처리하는 데이터 종류 (0) | 2021.08.12 |
댓글