1. str.replace( ) 추천하지 않는 경우
파이썬에서 데이터프레임 속 문자열 데이터를 변경(대체)할 때 주로 str.replace 메서드를 사용한다.
오늘은 이 메서드를 사용하면 안 되는 경우에 대해 알아보겠다.
아래는 UCI 머신러닝 저장소에서 제공하는 자동차 연비 데이터(auto mpg data)로
연비, 실린더 수, 배기량, 출력, 차종, 가속능력, 출시년도, 제조국, 모델명 정보를 담고 있다.
car_name을 제외한 컬럼들은 숫자형 데이터로 보이지만
df.info( )로 데이터 타입을 확인해보면 horse_power 컬럼이 object 타입임을 알 수 있다.
car_names를 제외한 컬럼들을 계산이 가능한 데이터 타입으로 변경하려 한다.
horsepower 컬럼에는 소수점이 있는 숫자형 데이터가 있으니 데이터 타입을 float로 바꾸면 좋을 것 같다.
astype() 메서드를 사용했으나 ValueError가 발생했다.
ValueError: could not convert string to float: '?'
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
에러 메시지를 확인해보면 '?' 라는 string 데이터를 float 타입으로 변경할 수 없다는 내용이다.
데이터 수가 많지 않으니 unique() 메서드로 어떤 데이터가 있는지 확인해봤다.
데이터 중 '?' 데이터가 하나 존재한다.
이 때 '?' 데이터를 없애기 위해 str.replace() 메서드를 사용하면 어떻게 될까?
기존 데이터를 변경시키지 않기 위해df_hp라는 데이터프레임을 새로 만들고
df_hp['horsepower'] 컬럼에 str.replace('?', '') 를 사용해봤다.
astype() 메서드를 적용시키려 했지만 또 다시 에러가 발생했다.
ValueError: could not convert string to float: ''
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
'?' 데이터가 ''으로 바뀌었지만 string data를 float로 변경할 수 없다는 내용은 동일하다.
다시 한 번 unique() 메서드로 데이터를 확인해보자.
에러 메시지 내용처럼 '?' 데이터가 빈값으로 바뀌었다.
이렇듯 데이터에 특정 문자만 존재할 때는 처리할 단계가 하나 늘어나므로 str.replace() 메서드를 추천하지 않는다.
(이전 글에서 사용한 pop_seoul 데이터는 ',' 를 공백으로 대체해도 정수 데이터가 존재해서 이 문제가 발생하지 않았다.)
빈 데이터를 처리하는 방법은 다양하다.
임의의 값으로 대체하거나 결측치가 포함된 행을 삭제하는 등 여러 선택을 할 수 있다.
auto mpg data에서 horsepower 데이터의 영향을 잘 모르므로 해당 행을 삭제하기로 했다.
2. dropna( )
dropna( ) 메서드로 결측치가 포함된 행을 제거했다.
398개이던 데이터 수가 392으로 줄어들었다.
unique() 로 다시 한 번 확인해보니 horsepower 컬럼에 있던 빈값이 삭제되었다.
결측치를 제거한 데이터에 astype 메서드를 적용시키자 오류 없이 데이터 타입이 변경된다.
3. srt.contains( ) 후 drop( )
기존의 데이터프레임에서 '?' 데이터가 포함된 행을 삭제하기 위해서는 drop을 사용하면 된다.
horsepower 컬럼 속 '?' 문자열이 포함된 데이터를 찾아 데이터프레임을 만들고 idx라는 변수에 할당했다.
df 데이터프레임에서 idx를 drop(삭제)하고 df_hp2 라는 새로운 데이터프레임에 저장했다.
이 때 '?' 는 특수문자이므로 '\?'로 작성해야 한다.
'?' 로 작성할 경우 아래와 같은 오류가 발생한다.
error: nothing to repeat at position 0
4. 비교 연산자
비교 연산자를 사용하면 코드가 더욱 간결해진다.
비교 연산자 != 를 사용하면 특정 문자와 동일하지 않은 데이터만 반환한다.
만약 특정 문자를 포함한 데이터를 삭제하고 싶다면 이 코드는 사용할 수 없다.
'데이터분석 공부 > DSBA 4기' 카테고리의 다른 글
12/03/2024 TIL (1) | 2024.03.12 |
---|---|
iloc loc Value Error 정리 (0) | 2024.03.11 |
파이썬 데이터프레임 astype( ) 으로 데이터 자료형 변경하기 (0) | 2024.03.08 |
파이썬 str.replace( ) 메소드로 데이터프레임 속 문자 변경하기 (1) | 2024.03.07 |
파이썬 column 명 바꾸기 (1) | 2024.03.07 |