Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo

1 개요[ | ]

Pandas 특정컬럼이 결측치인 행 제거

2 예시 1[ | ]

import numpy as np
import pandas as pd

df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": [pd.NaT, pd.Timestamp("1940-04-25"), pd.NaT]})
df

df.dropna(subset=['toy'])

3 예시 2[ | ]

import pandas as pd

df = pd.DataFrame(columns =
  ['Class','Name' ,'English','Math'], data = [
  ['A'    ,'Alice', 90      , 60   ],
  ['A'    ,'Bob'  , 80      , None ],
  ['B'    ,'Carol', None    , 80   ],
  ['B'    ,'Dave' , 60      , 80   ],
  ])
df

df.dropna(subset=['Math'])

4 같이 보기[ | ]

  • Pandas 결측치 가진 행 제거
  • R 특정컬럼이 결측치인 행 제거

Ctrl+C & Ctrl+V 시리즈: 이 SQL문을 판다스Pandas에서는 어떻게 할까? 00. 판다스란? 01. 판다스의 기본 데이터 구조 02. 퀴즈QUIZ로 모르는 것만 공부하기 03. SQL: 데이터 정의 언어 DDL(Data Definition Language) 0. CREATE - 판다스 데이터프레임 만들기 1. ALTER TABLE ADD COLUMN - 데이터프레임에서 열 데이터 추가 2. ALTER TABLE DROP COLUMN - 데이터프레임에서 열 데이터 삭제 04. SQL: 데이터 조작 언어 DML(Data Manipulation Language) 0. SELECT - 데이터프레임에서 데이터 조회 SELECT - 데이터프레임에서 열 조회 SELECT - 데이터프레임에서 행 조회 1. INSERT - 데이터프레임에서 데이터 추가 INSERT - 데이터프레임에서 행 데이터 추가 2. UPDATE - 데이터프레임에서 데이터 수정 UPDATE - 데이터프레임에서 행 데이터 수정 3. DELETE - 데이터프레임에서 데이터 삭제 DELETE - 데이터프레임에서 행 데이터 삭제

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo

이번 글에서는 유명한 Iris 데이터셋을 사용하여 판다스를 사용해 원하지 않는 데이터를 삭제하는 방법을 정리해봤습니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo

출처: Wikipedia 아이리스 꽃 데이터셋


먼저 판다스 라이브러리를 불러오고 데이터셋을 불러오겠습니다.

import pandas as pd 
iris = pd.read_csv("iris.csv")

iris 데이터셋의 첫 5줄을 확인하면 아래와 같습니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
iris 데이터셋의 첫 5줄


데이터셋 크기 (행, 열 개수) 확인하기

iris.shape

위 코드를 실행하면 (150, 5)가 출력됩니다. (행, 열) 순서로 iris 데이터셋에는 150개의 행과 5개의 열으 이루어져 있다는 걸 확인할 수 있습니다.


행 삭제하기

1. drop으로 인덱스 index 사용해서 삭제하기
데이터프레임.drop(인덱스)를 사용하여 삭제하고 싶은 행의 인덱스를 입력하면 됩니다.

new_df = old_df.drop(10, axis=0)
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
iris 데이터셋에서 index=2인 행을 삭제한 모습


넘파이와 같이 판다스에서 행은 axis=0이며 열은 axis=1로 지정할 수 있습니다.
디폴트 값이 axis=0이기 때문에 행을 삭제할 경우 생략 가능합니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
출처: Medium (이미지 클릭하면 이동)

한꺼번에 여러 개의 행을 삭제하고 싶을 경우 인덱스를 리스트 형식으로 넣는 것도 가능합니다.

new_iris = iris.drop([1,2]) 
new_iris.head()
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
index=1과 index=2인 열을 삭제한 예제


범위를 사용하여 행 삭제하기

iris2 = iris.drop(labels=range(40, 45), axis=0)

2. 파이썬 slice 사용하기
파이썬의 슬라이스를 사용하여 데이터 선택 및 삭제가 가능합니다.

  • data[:끝] - e.g. data=data[:10] 첫 9행 제외하고 다 삭제하기
  • data[시작:] - e.g. data=data[10:] 첫 10행 삭제하기
  • data[시작:끝]
iris[1:10]
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
인덱스 1부터 10을 제외하고 삭제하기

열 삭제하기

1. drop으로 열 이름을 사용해서 삭제하기

iris.drop('variety', axis=1) 또는 iris.drop('variety', axis = 'columns')
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
variety 열을 삭제한 모습


리스트를 사용해서 여러 개의 열을 한 번에 삭제할 수 있습니다.

iris = iris.drop(['sepal.length', 'sepal.width'], axis=1)
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
열 두개를 지운 데이터의 첫 5줄


숫자를 사용하여 삭제도 가능합니다.
밑은 iris 데이터셋의 첫 번째 (0), 두 번째 (1), 네 번째 (3) 열을 삭제하는 예제 코드입니다.

iris = iris.drop(iris.columns[[0,1,3]], axis=1)
Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
숫자로 행을 삭제

inplace = True or False?

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
pandas documentation
  • inplace=True: 기존 데이터 프레임을 변경하기
  • inplace=False: 데이터프레임을 변경 후 copy를 return 하기

판다스에서 drop을 사용할 때 inplace의 default 값은 False입니다.
위의 예제와 같이 drop에서 inplace를 따로 지정을 해주지 않으면 기존 데이터 프레임은 보존됩니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
inplace를 설정 안했을때

inplace=False 경우 변경된 (행이나 열이 제거된) 데이터 프레임의 copy가 return이 되기 때문에 데이터 프레임을 지정해주면 됩니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo

inplace=True를 쓰는 경우 기존 데이터 프레임에 변화가 생깁니다.

Pandas 특정 행 제거 - Pandas teugjeong haeng jegeo
inplace=True를 쓴 예시

"inplace=True" 설정값으로 적용하니 기존 데이터 프레임에서 'variety' 열이 사라진 걸 확인할 수 있습니다.