Picking out numerical data from the same column in pandas (Conditional astype)
DataFrame 작업을 하다 보면 하나의 column에 여러 형태의 data가 포함될 때가 많다.
특히 수치형 자료와 문자형 자료가 섞여 있는 경우는 매우 흔한데, 이런 케이스는 문자형 자료가 수치형 자료를 포괄하는 개념이기 때문에 연산의 필요성이 생길 때 문제가 생기는 경우가 많다.
이럴 때, 직관적으로 아래와 같이 Data Type을 변경하여 사용할 수 있는 경우도 많지만 그렇지 않은 경우도 있다.
df['datetime'] = df['datetime'].astype('datetime64[ns]') # 날짜 / 시간형 자료로 변환하기
df['Value'] = df['Value'].astype('float') # 실수형 자료로 변환하기
예를 들어 공정 데이터를 분석할 때 마땅히 숫자형 column이어야 하지만 공정의 Error 텍스트가 섞여 있다면 단순히 데이터타입을 변환하는 것만으로는 의미가 없을 것이다.
이 때 수치형 자료만 남겨서 column으로 저장하는 간단한 방법에 대해 소개하고자 한다.
원리는 간단한데, 출력하고자 하는 data type만 골라내는 function을 정의한 뒤 apply를 이용하여 return하는 방법이다.
간단히 lambda를 이용하여 분류도 가능하겠지만, 함수로 튜닝하는 것이 재사용성과 직관성에 좋다.
# DataType을 반환하는 함수 정의
def test_apply(x):
try:
return float(x)
except ValueError:
return None
# apply를 활용하여 필요한 데이터만 자료형을 바꾸어 return하기
test['Value'] = test['Value'].apply(test_apply)
해당 방식을 응용하면 다양한 데이터타입이 섞여있는 column도 처리하기 쉽다.
'Python > pandas' 카테고리의 다른 글
Pandas에서 DateTime Indexing 응용하기 (0) | 2021.08.12 |
---|---|
Pandas에서 결측치를 채워넣는 여러 방법들 (0) | 2021.07.13 |
Pandas concat 함수 응용하기 (0) | 2021.07.05 |