데이터 추출
head() 메서드를 이용해 데이터프레임에서 가장 앞에 있는 5개의 데이터를 추출하여 출력했다.
데이터를 열 단위로 추출하는 방법과 행 단위로 추출하는 방법을 알아보자.
열 단위 데이터 추출
데이터프레임에서 데이터를 열 단위로 추출하려면 대괄호와 열 이름을 사용해야 한다.
이때 열 이름은 꼭 작은따옴표를 사용해서 지정해야 하고 추출한 열은 변수에 저장해서 사용한다.
이때 1개의 열만 추출하면 시리즈를 얻을 수 있고 2개 이상의 열을 추출하면 데이터프레임을 얻을 수 있다.
country_df = df['country']
print(type(country_df))
print(country_df.head())
print(country_df.tail())
대괄호와 열 이름으로 데이터를 추출하여 country_df라는 변수에 저장하였다.
하나의 열을 추출하여 타입은 시리즈이다. 시리즈도 head, tail 메서드를 가지고 있기 때문에 가장 앞이나 뒤에 있는 5개의 데이터를 출력할 수 있다.
리스트에 열 이름을 전달하면 여러 개의 열을 한 번에 추출할 수 있다.
subset = df[['country', 'continent', 'year']]
print(type(subset))
print(subset.head())
(subset.tail())
인덱스는 0부터 시작하지만 행 데이터가 추가, 삭제되면 언제든지 변할 수 있다.
반면 행 번호는 데이터의 순서를 따라가기 때문에 정수만으로 데이터를 조회하거나 추출할 수 있으며 실제 데이터프레임에서는 확인할 수 없는 값이다.
print(df.loc[0])
print()
print(df.loc[99])
(인덱스의 없는 값을 사용하면 오류가 발생한다.)
데이터프레임의 마지막 행 데이터를 추출하는 방법은 다음과 같다.
number_of_rows = df.shape[0]
last_row_index = number_of_rows - 1
print(df.loc[last_row_index])
전체 행의 수(number_of_row)를 알아낸 뒤, 1을 뺀 값이 마지막 행의 index번호이다.
또한 tail메서드를 이용하여 구할 수 있다.
print(df.tail(n=1))
loc을 리스트로도 전달 가능하다.
print(df.loc[[0, 99, 999]])
tail 메서드와 loc 속성의 자료형은 다르다.
subset_loc = df.loc[0]
subset_tail = df.tail(n=1)
print(type(subset_loc))
print(type(subset_tail))
loc 속성의 자료형은 시리즈이고 tail 메서드의 자료형은 데이터프레임이다.
iloc 속성으로 행 데이터 추출하는 방법을 알아보자.
iloc 속성은 데이터 순서를 의미하는 행 번호를 사용하여 데이터를 추출한다.
print(df.iloc[1])
iloc 속성은 음수를 사용해도 데이터를 추출할 수 있다. -1을 전달하면 마지막 행 데이터를 추출한다.
하지만 데이터 프레임에 아예 존재하지 않는 행 번호를 전달하면 오류가 발생한다.
print(df.iloc[-1])
print()
print(df.iloc[1710])
iloc 속성도 여러 데이터를 한 번에 추출할 수 있다.
print(df.iloc[[0, 99, 999]])
데이터의 행과 열을 지정하는 방법을 알면 loc, iloc 속성을 좀 더 자유자재로 사용할 수 있다.
두 속성 모두 추출할 데이터의 행을 먼저 지정하고 그런 다음 열을 지정하는 방법으로 데이터를 추출한다.
df.loc[[행], [열]]이나 df.iloc[[행], [열]]과 같은 방법으로 코드를 작성하면 된다.
슬라이싱 구문으로 데이터 추출
subset = df.loc[:, ['year', 'pop']]
print(subset.head())
모든 행(:)의 데이터에 대해 year, pop열을 추출하는 방법이다.
subset = df.iloc[:, [2, 4, -1]]
print(subset.head())
range()를 이용하여 데이터를 추출해보자.
small_range = list(range(5))
print(small_range)
print()
print(type(small_range))
print()
subset = df.iloc[:, small_range]
print(subset.head())
print()
small_range = list(range(3, 6))
print(small_range)
print()
subset = df.iloc[:, small_range]
print(subset.head())
iloc 속성으로 데이터를 추출하려 정수 리스트를 전달하는 것이 간편해 보일 수 있지만 나중에 어떤 데이터를 추출하기 위한 코드인지 파악하지 못할 수 있다. 그래서 보통은 loc 속성을 이용하여 열 지정값으로 열 이름을 전달한다.
print(df.loc[10:13, ['country', 'lifeExp', 'gdpPercap']])