1. 행 단위 데이터 추출하기
데이터를 행 단위로 추출하려면 loc, iloc 속성을 사용해야 합니다.
loc : 인덱스를 기준으로 행 데이터 추출
iloc : 행 번호를 기준으로 행 데이터 추출
빨간 사각형 안에 들어간 0~4까지의 숫자는 데이터프레임의 인덱스입니다.
인덱스는 보통 0부터 시작하지만, 행 데이터의 변동이 있을 경우 0이 아닌 숫자가 먼저 올 수 있습니다.
또한 숫자 뿐만 아니라 first, second, third와 같이 문자열로도 지정이 가능합니다.
반면, 행 번호는 데이터의 순서를 따라갑니다. 반드시 정수만으로 데이터를 조회/추출 할 수 있으며
실제 데이터프레임에서는 확인이 불가능합니다.
1-1. loc 속성 사용하여 데이터를 추출하기
다음은 인덱스가 0인 행 데이터를 추출하였습니다.
'Afghanistan' 의 15세 이상 고용률 데이터를
1991년부터~ 쭉 살펴볼 수 있습니다.
인덱스 번호가 144인 'South Korea' 의 데이터를 추출하였습니다.
head() 와 tail() 메서드를 사용하여
처음과 끝, 각 5개씩 데이터를 추출했습니다.
만약 -50, -100 처럼 인덱스에 없는 값을 사용하면 어떻게 될까요?
데이터프레임의 마지막 행 데이터를 추출하려면 어떻게 할까요?
tail() 메서드를 이용하여, 인자 n에 1을 전달하는 방법이 있습니다.
2를 전달하면 2개의 데이터를 추출할 수 있습니다. 원하는 만큼 n의 값을 조정할 수 있습니다. (기본값은 5)
# shape() 메서드를 사용해서 구해보기
데이터프레임의 마지막 행 데이터의 인덱스를 알아내야 합니다.
이 때 shape 메서드를 사용하여 행의 크기를 알 수 있습니다.
행의 크기가 179입니다.
하지만 인덱스는 0부터 시작했기 때문에 우리는 여기서 1을 뺀 값을 찾아야 합니다.
인덱스가 10, 20, 30인 데이터를 한 번에 추출하려면 리스트에 원하는 인덱스를 담아 loc 속성에 전달하면 됩니다.
★ 주 의 ! 'tail 메서드와 loc 속성이 반환하는 자료형은 서로 다르다 ! '
loc 속성이 반환한 데이터 자료형은 시리즈,
tail 속성이 반환한 데이터 자료형은 데이터프레임 !
1-2. iloc 속성 사용하여 데이터를 추출하기
loc 속성은 데이터프레임의 인덱스를 사용하여 데이터를 추출했습니다.
하지만 iloc 속성은 데이터 순서를 의미하는 행 번호를 사용합니다.
데이터프레임의 인덱스 번호와 행 번호가 같아 같은 값이 추출 되었습니다.
loc 속성에서는 음수를 사용했을 때 오류가 발생했습니다.
하지만 iloc 에서는 추출에 성공했습니다.
-1를 입력하여 마지막 행 데이터를 추출하였습니다.
1-3. loc, iloc 속성을 자유자재로 사용하여 데이터 추출하기
보통은 작성한 코드가 어떤 데이터를 추출하기 위한 코드인지 파악하기 위해 loc 속성을 이용해 전달한다.
2. 열 단위 데이터 추출하기
데이터프레임에서 데이터를 열 단위로 추출하려면 대괄호와 열 이름을 사용해야 합니다.
이때 열 이름은 반드시 작은따옴표를 사용해서 지정해야 하며, 추출한 열을 따로 변수에 저장하여 사용할 수도 있습니다.
1개의 열만 추출할 경우 시리즈(Series)를, 2개 이상의 열을 추출하면 데이터프레임(DataFrame)을 얻을 수 있습니다.
2-1. 열 1개 추출하기
'country' 열만 추출하였기 때문에 데이터의 자료형은 시리즈라는 것을 확인할 수 있습니다.
head() 메서드는 상위 5개의 데이터를, tail() 메서드는 하위 5개의 데이터를 출력해줍니다.
2-2. 2개 이상의 열 추출하기
2000년, 2010년, 2020년 열의 데이터를 추출해보았습니다.
2개 이상의 열을 추출했기 때문에 데이터의 자료형은 시리즈가 아닌 데이터프레임입니다.
3. 슬라이싱 구문, range 메서드를 이용하여 데이터 추출하기
3-1. 슬라이싱 구문으로 데이터 추출하기
* python slicing(파이썬 슬라이싱) 이란 ?
- 연속적인 객체들 (리스트, 튜플, 문자열 등)의 범위를 지정한 후 객체들을 가져오는 것
- 슬라이싱을 하면 새로운 객체가 생성됩니다.
모든 행(:)의 데이터에 대해 2010년도와 2020년도 열을 추출하는 방법을 알아보도록 하겠습니다.
이때 loc와 iloc 속성애 전달하는 열 지정값은 반드시 형식에 맞게 전달해야 합니다.
iloc 속성의 열 지정값에 문자열 리스트를 전달하면 오류가 발생합니다.
3-2. range 메서드로 데이터를 추출하기
이번에는 iloc 속성과 파이썬 내장 메서드인 range를 응용해보겠습니다.
iloc 속성의 열 지정값에는 정수 리스트를 전달해야한다는 점을 이용하게 됩니다.
* range : 지정한 구간의 정수 리스트를 반환
사실 range 메서드는 지정한 범위의 정수 리스트를 반환하는 것이 아니라 제너레이터를 반환합니다.
iloc 속성은 제너레이터로 데이터 추출을 할 수 없습니다.
그렇기 때문에 range가 반환한 제너레이터를 정숫값을 가진 리스트로 변환하여 iloc의 열 지정값에 전달합니다.
0~4 범위에 해당되는 'country' 열 및 1991년부터 1994년까지의 고용률의 상위 5개의 값이 출력되었습니다.
이번에는 2010년대의 데이터 값을 확인하고자 범위를 지정하였습니다.
20~29 범위의 정수 리스트 (2010년대) 를 구하여 고용률 값을 추출하였습니다.
# range 메서드에 3개의 인자를 전달한다면?
1부터 30까지 5만큼 건너뛰는 제너레이터가 생성되었습니다.
이 제너레이터를 리스트로 변환하면 (1, 6, 11, 16, 21, 26) 이 됩니다.
3-3. 슬라이싱 구문과 range 메서드를 비교해보자.
슬라이싱 구문과 range 메서드 둘 다 자주 사용하지만, 실무에서는 슬라이싱 구문을 더 선호합니다.
range 메서드는 제너레이트를 리스트로 변환하는 등의 과정들이 필요하지만, 슬라이싱 구문은 필요가 없기 때문입니다.
list(range(5)) 라고 쓰는 것보다 [:5] 라고 쓰는 게 간소하면서도 더욱 편리하기 때문입니다.
4. 원하는 행/열 데이터 추출하기
'각 나라별 15세 이상 고용률' 데이터에서 내가 필요로 하는 데이터를 추출하는 방법을 배워보도록 하겠습니다.
1991년부터 2022년까지의 데이터 중 5년 단위로 (1995, 2000, 2005, 2010, 2015, 2020) 만 추출해보겠습니다.
type 메서드를 사용하면 year5_df에 저장된 데이터의 자료형이 데이터프레임이라는 것을 알 수 있습니다.
179개의 나라 중 5개 (대한민국, 미국, 일본, 러시아, 중국) 만 따로 추출해보겠습니다.
isin() 메서드는 Series나 DataFrame 안에 isin() 메서드에 입력된 데이터가 있는지 판별해주는 역할을 합니다.
입력된 데이터는 'True' 값을, 입력되지 않은 데이터에는 'False' 를 출력합니다.
여기서 True, False 값들을 다시 year5_df 데이터프레임에 적용해주면 끝 !
결괏값으로 주요 5개국의 15세 이상 고용률 5년 주기 데이터가 추출되었습니다.
[참고자료]
(Data) Gapminder (https://www.gapminder.org/data/)
(Book) Do it! 데이터 분석을 위한 판다스 입문 (Chen. Daniel Y 저) - 이지스퍼블리싱
|
(Documents) pandas: powerful Python data analysis toolkit (https://pandas.pydata.org/docs/pandas.pdf)
'AI Big Data > pandas' 카테고리의 다른 글
시리즈 다루기 (0) | 2020.07.08 |
---|---|
나만의 데이터 만들기 (0) | 2020.07.07 |
기초적인 통계 계산하기 (2) | 2020.07.06 |
데이터 집합 불러오기 (0) | 2020.07.06 |
pandas 설치하기 (0) | 2020.07.06 |