Pandas 행 범위 삭제 - Pandas haeng beom-wi sagje

존챙의 끄적공장

  • drop 함수
Pandas 행 범위 삭제 - Pandas haeng beom-wi sagje

이 데이터프레임에서 race_ethnicity 행의 'All' 값이 속한 행만 삭제하고 싶으면 어떻게 해야 할까?

drop 함수를 쓰지 않으면 condition=df['race_ethnicity']!='All'이라는 조건을 적용하는 방법도 있지만,, 그래도 함수를 이용해서 풀어보자.

특정한 label이나 해당 축을 삭제하고 싶을 때 쓰는게 drop 함수이며,

기본적인 형태는 df.drop('row or column 이름', axis='index or 0' or 'columns or 1') 이다.

index 값을 지우고 싶을 땐 axis=0, column을 지우고 싶을 땐 axis=1을 붙어주면 되는데, axis를 생략하고 싶으면 df.drop(index='row이름') / df.drop(columns='column이름') 이런식으로 쓰자.

삭제하고 싶은 row나 column의 수가 둘 이상일 땐 ['cow','bird'] 이런 식으로 중괄호 붙여주기.

이제 위의 사례를 수행해보자. 'race_ethnicity'가 'All'인 행들을 모두 삭제하려면 먼저 이 행들의 index 번호를 알아야 한다. column 값들은 모두 index를 축으로 정렬되어 있기 때문이다.

A = df2[df2['race_ethnicity'] == 'All'].index

-> Int64Index([8, 9, 19, 20, 30, 31, 41, 42], dtype='int64')

A의 출력값으로 위와 같이 All이 속한 모든 index 번호가 정렬되어 나오는 것을 확인할 수 있다.

- 이제 A를 drop 함수에 적용하려면 axis를 index로 걸어서 해야 한다. A가 'All'들의 index 번호를 보유하고 있기 때문이다.

어떤 특정한 조건을 걸고 싶을 땐 A 자리에 데이터프레임이 아닌 인덱스를 제공해야 에러없이 정상적으로 작동하는 것을 꼭 기억하자.

df2.drop(A,axis='index',inplace=True)

위의 코드들을 차례대로 실행하고 다시 df2를 출력해보면

Pandas 행 범위 삭제 - Pandas haeng beom-wi sagje

이렇게 8, 9, 19, 20, 30, 31, 41, 42번의 'All'이 포함된 모든 열이 삭제된 걸 확인할 수 있다. 

앱피아

이전 포스팅에서는 loc()를 이용하여 각 인덱스(label) 값을 바탕으로 데이터를 선별하는 방법에 대해서 살펴봤습니다. 하지만, 생각보다 키값 또는 인덱스 값을 정확히 알고 있는 사람들이 많지 않을 수 있습니다. 따라서, 이번 포스팅에서는 이전 포스팅과는 달리, 숫자를 이용한 범위 지정 또는 데이터를 선택하는 방법에 대해서 살펴보고자 합니다. 

이와 같은 숫자를 이용하여 데이터를 선택하거나 범위를 지정하는 방식에 사용되는 함수는 다음과 같습니다. 

iloc() - 숫자를 이용한 범위 또는 데이터 선택

그럼 예시를 보면서 하나식 살펴보도록 하겠습니다. 

example) 특정 열까지 데이터 출력 

import pandas as pd

import numpy as np

df = pd.DataFrame(np.random.randn(85),

index = ['a','b','c','d','e','f','g','h'], columns = ['A''B''C''D','E'])

print("~4번째 열까지 출력")

print (df.iloc[:4])

cs

result) 

~4번째 열까지 출력

A         B         C         D         E

a  0.026009 -0.977460 -0.506913  0.794095  0.566339

-1.022479 -0.533778 -0.167793  0.185686 -0.753602

-0.388914 -1.178371 -0.901626 -2.087328  0.595545

d  1.487943  0.287191 -1.001782  0.746699  0.868238

cs

iloc[]를 이용할 때도 0부터 시작합니다. 따라서, [:4]를 통해 0, 1, 2, 3에 해당하는 열들을 출력합니다. 

그럼 특정 행을 한번 출력해보도록 하겠습니다. 

example) 특정 행까지 데이터 출력 

import pandas as pd

import numpy as np

df = pd.DataFrame(np.random.randn(85),

index = ['a','b','c','d','e','f','g','h'], columns = ['A''B''C''D','E'])

print("~2번째 행까지 출력")

print (df.iloc[:,:2])

cs

result) 

~2번째 행까지 출력

A         B

-0.322768 -1.089023

b  0.643058  0.730364

c  0.861823 -1.403163

-0.119051  0.191363

e  0.997609 -0.376027

f  1.059350 -1.378842

g  1.110402 -0.775568

-0.150513  1.303761

cs

iloc[열, 행] 기반으로 진행이 됩니다. 만약에 인자가 한개만 입력되었다면, 열만 표시가 됩니다. 따라서 행만 출력하시고자 한다면 iloc[:,행범위]을 입력해주셔야 합니다. 그럼 이번에는 좀 더 다른 예시를 살펴보겠습니다. 행열에 대한 특정 범위 및 특정 데이터만 선별해보도록 하겠습니다. 

example) 

import pandas as pd

import numpy as np

df = pd.DataFrame(np.random.randn(85),

index = ['a','b','c','d','e','f','g','h'], columns = ['A''B''C''D','E'])

print("특정 데이터 선별")

print(df.iloc[[135], [13]])

print("특정 범위 데이터 선별")

print(df.iloc[1:3,1:3])

cs

result)

특정 데이터 선별

B         D

b  1.104821  1.288467

-0.035517 -1.084780

-0.974689  0.426956

특정 범위 데이터 선별

B         C

b  1.104821 -1.080086

c  0.199188  0.430382

cs

특정데이터를 선별할 경우에는 iloc[[열 부분],[행 부분]] 형태로 하셔야 합니다. 그럼 범위를 지정할 경우에는 iloc[열 시작 : 열 끝(열 부분), 행 시작 : 행 끝(행부분)]으로 사용하셔야 합니다. 

이번 포스팅에서는 인덱스 방법을 바탕으로 데이터를 선별하고 선택하는 방법에 대해서 살펴봤습니다. 이전 포스팅인 loc를 활용하는 부분과 함께 보는 것도 좋을 것 같습니다. ( 다음 링크 참조)

파이썬[Python] Pandas, DataFrame의 인덱스(label)를 이용한 열, 행 선택 방법(loc)

불러오는 중입니다...

혹시 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다.