무효 클릭 IP 추적 중...
파이썬/pandas

pandas drop을 활용한 데이터프레임 열/행 삭제하는 방법

꼬예 2021. 7. 16.

 

챗gpt를 이용한 데이터분석과 시각화 마스터하기 >>

 

 

열(column 삭제하기)

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop('사과')

output :

 

drop 함수 안에 내가 삭제하고 싶은 컬럼명만 넣게되면 위와 같이 KeyError가 발생하게 됩니다.

이럴땐 axis를 추가해줘야 하는데요.

 

# axis = 1

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop('사과',axis=1)

output :

판다스에서는 컬럼을 삭제할때 axis = 1을 사용하게 됩니다. 

즉 세로방향으로 통째로 날아가게 되는거죠.

반면 mean이나 sum과 같은 연산에서는 axis =1이 column방향, 즉 가로방향으로 연산이 됩니다. 상당히 헷갈릴 수있는 부분이죠.

 

 

그래서 저는 axis에 명시적으로 'columns'라고 기입해주는것을 추천드립니다.

# axis = 'columns'

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop('사과',axis='columns')

output :

 

axis도 넣기 귀찮다라고 하시는 분들은 

아래와 같이 적어주셔도 작동하니 참고 하세요!

# .drop(columns='컬럼명')

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop(columns='사과')

output :

 

 

(row삭제하기)

열에서는 '컬럼명'을 기준으로 drop method를 동해 우리가 원하는 컬럼을 삭제했었는데요.

행을 삭제할때 기준이 되는 것은 '인덱스'입니다.

 

즉, drop method의 인자로 들어가는값이 인덱스명이 들어가야하죠.,

거기에 axis = 0을 적어주면됩니다.

앞서 column을 삭제할때는 axis =1 였죠?

 

# axis = 0

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop('상호네',axis=0)

output :

 

앞서 말씀드렸듯이 axis = '숫자'형태는 매번 헷갈릴 소지가 있기때문에 문자 형태로 적는걸 추천드리는데요.

# axis = 'rows'

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop('상호네',axis='rows')

axis = 'rows'를 적어주시면 됩니다.

output :

 

마찬가지로 axis 를 적기 귀찮으신분들은 아래와 같이 index = '인덱스명' 을 적어주셔도 무방합니다.

 

# .drop(index='인덱스명')

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop(index= '상호네')

output :

 

 

지금까지는 단순히 인덱스, 컬럼명을 기준으로 삭제를 시켜보았는데요,

 

데이터 특정값의 조건을 만족하는 행을 지우고싶을 땐 어떻게 할까요?

 

조건을 만족하는 행 삭제

앞서 index 를 배운 방법을 응용하면 됩니다.!

 

예를 들어 딸기 가격이 700원이 넘는 가게를 삭제하고 싶다고 합시다.

1. 이럴땐 먼저 필터를 걸어주어야 겠지요? -->  df[df['딸기']>700]

2.  필터된 데이터의 인덱스를 구합니다. --> df[df['딸기']>700].index

3. 앞서 배운 index =  넣어주면 됩니다.

import pandas as pd

test_data = {'상호명' :['상호네', '현정이네', '문영이네', '동엽이네', '우제네'],
            '사과' : [1000, 900, 800, 1000, 200],
            '배' : [1100, 800, 700, 500, 2000],
            '딸기' : [800, 800,700,500,1000],
            '포도' : [1500, 900, 1000, 800, 900]}

df = pd.DataFrame(test_data)
df.set_index('상호명', inplace=True)
#### drop 사용 ###
df.drop(index= df[df['딸기']>700].index)

output :

정상적으로 삭제가 된것을 확인할수가 있죠.

 

 

 

👉 쥬피터노트북에 chatgpt 적용 하기

 

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글