판다스에서 데이터를 행단위로 가져오려면 판다스에서 제공하는 함수를 사용해야 합니다.
제공하는 함수는 아래와 같이 두가지입니다.
속성 | 설명 |
loc | 인덱스 기준으로 행 데이터 읽기 |
iloc | 행 번호를 기준으로 행 데이터 읽기 |
두가지 함수를 이해하기 위해서는 먼저 인덱스와 행번호 개념을 아셔야 하는데요.
둘은 비슷한 듯 하지만 확연히 다른 행 구분자입니다.
인덱스와 행번호란?
판다스의 데이터 프레임을 살펴보면 위와 같은 형식으로 출력되는데요.
빨간색으로 보이는 바로 인덱스라불리는 곳입니다.
현재는 데이터가 숫자형식으로 순차적으로 정렬되어 있어서 마치 행번호처럼 보이지만,
사실 인덱스는 문자열로 지정할 수 있고, 숫자도 중구난방일 수 있습니다.
그건 사용자가 설정하기 나름이지요.
즉 위에 처럼 2번 인덱스를 삭제하면
반면 행번호는 말그대로 0번부터 시작해서 순서대로 이어지지만 인덱스는 그렇지 않다는 것을 알 수 있죠.
그럼 행번호와 인덱스에 대한 느낌이 오시죠? ㅎㅎ
그럼 이제 메소드를 통해 데이터를 추출해봅시다.
loc로 행 데이터 추출하기
loc 속성은 인덱스를 통해 행 데이터를 가져옵니다.
가져오는 방법은 아래와 같습니다.
데이터프레임명.loc[인덱스]
그럼 df 데이터 프레임에서 0번 인덱스 데이터를 가져와보죠.
print(df.loc[0])
그럼 아래와 같이 0번 인덱스에 해당하는 행 데이터가 추출됩니다.
country Afghanistan
continent Asia
year 1952
lifeExp 28.801
pop 8425333
gdpPercap 779.445
Name: 0, dtype: object
만약 인덱스가 없는 데이터를 가져오면 에러를 발생시킵니다.
만약 2번 인덱스가 삭제된 상황에서 2번 인덱스를 가져오게 되면 아래와 같이 KeyError를 발생시킵니다.
KeyError Traceback (most recent call last)
여러개의 인덱스에 해당하는 행 데이터 추출하기
만약 1, 3, 5 인덱스의 데이터를 한꺼번에 가져오고 싶다면, 리스트에 원하는 인덱스를 담아 loc 속성에 전달하면 됩니다.
print(df.loc[[1,3,5]])
출력
country continent year lifeExp pop gdpPercap
1 Afghanistan Asia 1957 30.332 9240934 820.853030
3 Afghanistan Asia 1967 34.020 11537966 836.197138
5 Afghanistan Asia 1977 38.438 14880372 786.113360
iloc 속성으로 행 데이터 읽어오기
iloc 속성은 행번호를 통해 행 데이터를 가져옵니다.
가져오는 방법은 아래와 같습니다.
데이터프레임명.iloc[행번호]
그럼 df 데이터 프레임에서 0번째 행 데이터를 가져와보죠.
print(df.iloc[0])
그럼 아래와 같이 0번째 행에 해당하는 행 데이터가 추출됩니다.
country Afghanistan
continent Asia
year 1952
lifeExp 28.801
pop 8425333
gdpPercap 779.445
Name: 0, dtype: object
iloc를 통해 마지막 행 데이터 가져오기
iloc는 파이썬처럼 음수를 사용해서 데이터를 추출할 수도 있습니다.
다음은 -1 인덱스를 통해 마지막 행 데이터를 추출한 예제입니다.
print(df.iloc[-1])
출력
country Zimbabwe
continent Africa
year 2007
lifeExp 43.487
pop 12311143
gdpPercap 469.709
Name: 1703, dtype: object
위 처럼 마지막 행에 해당하는 데이터가 추출된 것을 볼 수 있습니다.
iloc를 통해 여러개의 행 데이터 가져오기
iloc 속성 또한 여러개의 행번호에 해당하는 행 데이터를 한꺼번에 가져올 수 있습니다.
방법은 원하는 행번호를 리스트에 담아 전달하면 됩니다.
loc와 똑같은 방법입니다.
print(df.iloc[[0,1,3,-1]])
0, 1, 3번째 행과 맨 마지막 행 데이터를 가져와보죠
country continent year lifeExp pop gdpPercap
0 Afghanistan Asia 1952 28.801 8425333 779.445314
1 Afghanistan Asia 1957 30.332 9240934 820.853030
3 Afghanistan Asia 1967 34.020 11537966 836.197138
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298
위와 같이 해당 행 데이터가 추출된 것을 확인할 수 있습니다.
loc, iloc를 통해 행과 열 데이터 가져오기
loc와 iloc를 통해 행데이터 뿐만 아니라 열 데이터도 지정해서 가져올 수가 있습니다.
예제를 통해 살펴보도록 하죠
print(df.loc[:,['year', 'continent']])
위 구문은 모든행(:)에 대해 ''year'와 'continent' 열 데이터만 가져와라라는 명령어입니다.
출력물은 아래처럼 나올 것입니다.
위예제에서 모든 행의 데이터를 가져오라고 할떄 사용한 방법은 바로 슬라이싱 방법입니다.
즉 : 라고 입력을 하면 모든 데이터를 가져와라라고 명시를 하는 것이죠.
print(df.iloc[:,:3])
위는 모든 행에 대하여 3번열 데이터 전까지,
즉 country(0), continent(1), year(2)의 열데이터만 출력하라는 스크립트입니다.
출력은 아래와 같습니다.
print(df.loc[[1,4],['year','pop']])
위처럼 1,4 인덱스에 해당하는 행에서 year열과 pop열 데이터만 가져올 수도 있습니다.
year pop
1 1957 9240934
4 1972 13079460
iloc같은 경우는 행과 열 인덱스에 정수리스트를 전달해줘야 합니다.(열 이름을 넣어주면 에러가 나요)
print(df.iloc[[1,4],[2,4]])
위와 같은 결과를 내기 위해서 year에 해당하는 인덱스 2 값과, pop에 해당하는 index 4를 리스트로 전달해주었습니다.
year pop
1 1957 9240934
4 1972 13079460
그럼 위와 같이 출력이 나온 것을 알 수 있었습니다.
예제를 통해 살펴보셨듯이 판다스에서는 loc와 iloc속성을 통해서 원하는 데이터에 자유자재로 접근할 수 있습니다!