열(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 :
정상적으로 삭제가 된것을 확인할수가 있죠.
'파이썬 > pandas' 카테고리의 다른 글
[판다스 기초] 특정 열(column) 삭제 하는 방법 (0) | 2022.08.23 |
---|---|
[판다스 기초] 인덱스(index) 시작 번호 지정 하는 법 (0) | 2022.08.23 |
[판다스] 엑셀(excel) sheet별 데이터 이어 붙이는 방법 (0) | 2022.08.22 |
[pandas 기초] 판다스 행 전체 출력(row 생략 없애기) (0) | 2022.04.07 |
[판다스 기초] dropna를 통해 결측치가 있는 행|열 제거 방법 (0) | 2021.07.16 |
댓글