판다스에서 데이터를 행과 열로 데이터를 추출하는 방법을 살펴보겠습니다. 몇 가지 기본 문법만 숙지하면 다양한 방식으로 응용할 수 있습니다. 먼저 컬럼 데이터를 추출하는 방법을 알아보겠습니다.
데이터 불러오기
# 판다스 라이브러리 임포트
import pandas as pd
# plotly express에 내장되어있는 gapminder 데이터프레임을 사용하겠습니다.
import plotly.express as px
# plotly가 설치되어있지 않다면 아래 명령으로 설치할 수 있습니다.
# !pip install plotly
# 데이터 불러오기
df = px.data.gapminder()
컬럼 데이터 추출하기
데이터프레임에서 컬럼 데이터를 추출하려면 대괄호([ ])와 컬럼명을 사용해야 합니다. 이 대괄호 안에 컬럼명을 집어넣으면 컬럼명에 맞는 컬럼 데이터가 추출됩니다. 이렇게 추출된 데이터는 변수에 할당(저장)하여 사용할 수 있습니다.
# 대괄호와 컬럼명을 사용하여 원하는 컬럼을 추출합니다.
# 이때 컬럼명은 작은 따옴표 또는 큰 따옴표를 사용해 감싸주어야 합니다.
# 추출된 컬럼 데이터를 country라는 이름의 새로운 변수에 할당합니다.
country = df['country']
# 대괄호가 하나인 경우에는 Series를 반환합니다.
print(type(country))
country.head()
여러 개의 컬럼 데이터를 추출하는 경우에는 대괄호를 두번([[ ]]) 사용합니다.
# 여러 개의 컬럼 데이터를 추출하는 경우에는 대괄호를 두번 사용합니다. [[]]
# 리스트 이용하여 컬럼명을 대괄호 안에 집어넣은 것입니다.
countries_by_continents = df[['country', 'continent']]
# 대괄호가 두개인 경우에는 DataFrame을 반환합니다.
print(type(countries_by_continents))
countries_by_continents.head()
대괄호를 두번 사용하는 문법을 조금 더 자세히 살펴보겠습니다. 위의 코드를 리스트를 사용해서 다시 실행시켜 보겠습니다.
# columns라는 새로운 변수에 리스트를 할당합니다.
# 이 리스트에는 컬럼명 'country'와 'continent'가 들어갑니다.
columns = ['country', 'continent']
# 이 리스트를 대괄호 안에 집어넣습니다.
countries_by_continents = df[columns]
# 결과를 출력합니다.
print(type(countries_by_continents))
countries_by_continents.head()
동일한 결과가 나온 것을 알 수 있습니다. 그러므로 1) 대괄호를 두 번 쓰는 코드와 2) 대괄호 + 리스트를 사용한 코드는 같은 코드라고 볼 수 있습니다.
행 데이터 추출하기
이번에는 행 데이터를 추출하는 문법을 배워보겠습니다. 데이터프레임에서 행 데이터를 추출하는 방법은 두가지가 있습니다. 1) .loc 속성을 사용하는 방법과 2) .iloc 속성을 사용하는 방법입니다.
• .loc[] 은 인덱스(index)를 기준으로 행 데이터를 추출합니다.
• .iloc[]은 행 번호를 기준으로 행 데이터를 추출합니다.
자세한 내용은 아래 예제를 보면서 알아보겠습니다.
# print() 함수를 이용하지 않아도 주피터 노트북이 결과를 출력해줍니다.
# 단, 이 경우 마지막 명령만 출력됩니다.
df.head()
반면 행 번호의 경우에는 테이터프레임에 출력되는 값이 아니며, 문자 그대로 행의 순서를 말합니다.
# .loc[] 이용하여 행 데이터를 추출할 수 있습니다.
# 대괄호 안에는 인덱스를 집어넣습니다.
# 컬럼 데이터를 추출하는 것과 마찬가지로
# 대괄호가 하나인 경우에는 Series를 반환합니다.
print(type(df.loc[0]))
df.loc[0]
In [7]:
# 여러 개의 행 데이터를 추출하기 위해서
# 인덱스 리스트를 만들어 .loc[] 안에 집어넣습니다.
# 컬럼 데이터를 추출하는 것과 마찬가지로
# 대괄호가 하나인 경우에는 DataFrame을 반환합니다.
print(type(df.loc[[0, 3, 6, 9]]))
df.loc[[0, 3, 6, 9]]
# 아래와 같은 방법으로 여러개의 행 데이터를 추출할 수 있습니다.
# 이 경우 인덱스 1부터 6까지 총 6개를 추출합니다.
# 컬럼 데이터를 추출하는 것과 마찬가지로
# 대괄호가 하나인 경우에는 DataFrame을 반환합니다.
print(type(df.loc[1:6]))
df.loc[1:6]
# .iloc[] 이용하여 행 데이터를 추출할 수 있습니다.
# 대괄호 안에는 행 번호를 집어넣습니다.
# 컬럼 데이터를 추출하는 것과 마찬가지로
# 대괄호가 하나인 경우에는 Series를 반환합니다.
print(type(df.iloc[0]))
df.iloc[0]
.loc[]과 마찬가지로 여러개의 행 데이터를 추출하기 위해서는 대괄호를 두번 사용합니다. 컬럼을 추출하는 것과 유사합니다.
In [10]:
# 여러 개의 행 데이터를 추출하기 위해서
# 행 번호 리스트를 만들어 .iloc[] 안에 집어넣습니다.
# 컬럼 데이터를 추출하는 것과 마찬가지로
# 대괄호가 하나인 경우에는 DataFrame을 반환합니다.
print(type(df.iloc[[0, 3, 6, 9]]))
df.iloc[[0, 3, 6, 9]]
행열 데이터 한번에 추출하기
이번에는 행열 데이터를 한번에 추출하는 방법을 알아보겠습니다. 데이터프레임에서 행열 데이터를 한번에 추출하는 방법은 크게 두가지가 있습니다. 1) .loc[인덱스, 컬럼]를 사용하는 방법과 2) .iloc[행 번호, 열 번호]를 사용하는 방법입니다.
자세한 내용은 아래 예제를 보면서 알아보겠습니다.
# 예제1 .loc[]
# 인덱스 이름이 100인 모든 컬럼 값에 대한 데이터를 추출합니다.
df.loc[100, :]
# 예제2 .iloc[]
# 행번 호가 100인 모든 컬럼 값에 대한 데이터를 추출합니다.
df.iloc[100, :]
# 예제3 .loc[]
# 인덱스 리스트와 컬럼 리스트를 만족하는 데이터를 추출합니다.
df.loc[[0, 100, 200, 300, 400], ['country', 'year', 'pop']]
# 예제4 .iloc[]
# 행 번호 리스트와 컬럼 번호 슬라이싱 구문을 만족하는 데이터를 추출합니다.
df.iloc[[0, 100, 200, 300, 400], :3]
-이 글은 아나콘다(Anaconda3)가 설치된 환경을 기준으로 작성되었습니다.