본문 바로가기

카테고리 없음

판다스(pandas) - 행단위 데이터 읽기 (loc, iloc)

반응형

 

 

판다스에서 데이터를 행단위로 가져오려면 판다스에서 제공하는 함수를 사용해야 합니다.

제공하는 함수는 아래와 같이 두가지입니다.

 

속성 설명
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속성을 통해서 원하는 데이터에 자유자재로 접근할 수 있습니다!

 

반응형