간단하지만 은근히 속썩이는 데이터 유형에 대해 다뤄보겠습니다.
현업에서 데이터에 저장된 날짜 형태로는 2022-01, 2022-02, ... 2022-12 등의 형태로 연 월이 저장되기도 하지만, 2022.01, 2022.02 ~ 2022.12 이런 형태로 날짜를 저장하기도 합니다.
하이픈으로 연결된 경우, 엑셀에서 데이터 유형을 날짜로 인식하려고 노력하지만, 2022.01과 같은 경우에는 Python은 특히나 더욱더 소수점으로 생각합니다.
2022.01을 2022년 1월로 읽지 않고, 2022.01를 이천이십이점공일 정도로 소수점으로 생각하여 읽습니다.
특히 2022.10 으로 되어 있는 데이터의 경우, 문자열로 변경 시 2022.1로 바뀌면서 2022.01과 굉장히 혼동되기 쉽게 바뀌는데요.
이를 해결하기 위해 어떤 형태로 파이썬 함수를 짜야하는 지 알아보겠습니다.
먼저 데이터를 준비해줍니다.
데이터는 2022년 1월 ~ 12월까지 작성하였습니다.
import pandas as pd
df = pd.DataFrame(
{'달력연도/월' : [2022.01, 2022.02, 2022.03, 2022.04, 2022.05,\
2022.06, 2022.07, 2022.08, 2022.09, 2022.10, 2022.11, 2022.12]})
df
문제는 바로 2022.10 부분이라 강조하였습니다.
현재 데이터 타입을 보겠습니다.
float형태입니다.
Python에서 float은 소수점을 포함하는 숫자 입니다.
2022.01은 숫자가 아니라 날짜 데이터로 변경하고 싶기 때문에 문자로 먼저 변경해주어야 합니다.
문자열 데이터로 변경해주고자 합니다.
astype(str)로 변경해주었더니 object(문자열 형태)로 잘 변경되긴 하였으나, 10월이 1로 바뀌어 1월과 대단히 헷갈리게 변경되었습니다.
해결책 - 문자열 다루기 응용
zfill, ljust, rjust 등으로 변경가능합니다.
먼저 위의 함수에 대해 간단히 알아보겠습니다.
test = 'python'
print('zfill의 경우 : ', test.zfill(10))
print('ljust의 경우 : ', test.ljust(10, '0'))
print('rjust의 경우 : ', test.rjust(10, '0'))
print('center의 경우 : ', test.center(10, '0'))
[결과물]
python이라는 6글자 데이터에 대해서
zfill, rjust, ljust, center를 통해 빈칸을 채울 수 있습니다.
결과를 확인할 경우, test.zfill(10)은 python이라는 글자가 6갠데, 4개를 더 채워줘 이런 뜻입니다.
ljust의 경우, l이 'left'(왼쪽)입니다. python이라는 글자 왼쪽으로 정렬하라는 뜻입니다. 그래서 ljust의 경우, python이라는 글자를 왼쪽으로 정렬하는데 10 : 10개 칸이 있으니 남은 4칸은 '0'(문자열 0)으로 채워달라는 뜻입니다.
때문에 'python'.ljust(10, '0') 의 결과는 p y t h o n 0 0 0 0 으로 나타나게 됩니다.
rjust는 r이 'right' 오른쪽이라는 뜻이며 ljust와 반대입니다.
총 10칸에서 python이라는 글자를 오른쪽으로 정렬하고 나머지 칸은 0 으로 채워달라는 뜻입니다.
0 0 0 0 p y t h o n (여기서 0은 문자열 0 입니다.)
최종 결과물
그럼 이제 돌아가서 2022.10을 표현하기 위해서 어떻게 해야하는지 보겠습니다.
df['달력연도/월'].astype(str).apply(lambda x : x.ljust(7, '0'))
ljust 함수를 활용하여 10월달 object임에도 2022.10으로 변경할 수 있었습니다.
그럼 이제 마지막으로 날짜 데이터 바꾸는 방법은 pd.to_datetime을 사용하면 될 것 같습니다.
사소하지만 현업에서 꼭 필요한 내용으로 정리하였습니다.
많이 활용하시길 바랍니다.
'파이썬(Python)' 카테고리의 다른 글
[파이썬/Python] 파이썬으로 폴더 내 엑셀파일 한번에 통합하기 (0) | 2022.11.22 |
---|---|
[파이썬/Python] 영화('동감') 댓글 리뷰 워드 클라우드(wordcloud)로 만들어보기 (0) | 2022.11.20 |
[파이썬/Python] 분리된 엑셀 시트 하나의 시트로 통합하기 (0) | 2022.11.06 |
[파이썬/크롤링] 멜론차트 Crawling, Selenium으로 동적페이지 크롤링하기 (0) | 2022.10.18 |
[Python] 정규표현식을 통한 숫자형태 변환 replace 함수활용 (1) | 2022.10.04 |
댓글