pandas excel 날짜 type : float -> str [ ps. 엑셀 날짜 그대로 출력하기 ]

이유진·2023년 6월 1일

pandas

목록 보기
2/2
post-thumbnail

어제 pasdas 모듈을 이용하면서 리펙토링 진행시,
엑셀의 날짜 데이터 중 int, str, datetime type일경우는 해결했는데,
역시나
float type일 경우, 문제가 발생했다...
[ ps.
openpyxl에서도 float 타입일경우만, 2000년대의 날짜 데이터가 자꾸 90년대 데이터로 출력되서 엑셀의 데이터와 db에 저장된 날짜 비교에서 버그가 발생했었다...
]

pandas 모듈을 이용해도, 역시나 90년대의 날짜로 출력되는 것이다..
그래서 오늘 오전 내내 type 변환하는 서치만 주구장장 한것 같다...ㅠ

블로그나 다른 stackoverflow에서는

나는 read_excel을 통해 읽은 엑셀을 df 로 선언하고
엑셀의 날짜 컬럼을 df['date'] 라고 칭하고 작성하도록 하겠다.

import pandas as pd

[ 방법 1] 
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.strftime('%Y-%m-%d') # str type으로 변환하기 위함

[ 방법 2 ]
df['date'] = pd.to_datetime(df['date'], unit='s')

[ 방법 3 ] 
df = df['date'].apply(lambda x: pd.Timestamp(x).strftime ('%Y-%m-%d') )
.....

으로 출력하라는 것이다.

근데
아래의 엑셀을 실제로 출력해보면,

아래의 사진처럼 출력되는 것이다...


난 2023년을 출력하고 싶었으나,
위의 to_datetime 함수를 통해서 호출해도 원하는 데이터를 출력하지 못하는것이다.

float type -> 원하는 데이터 데이터 타입(str)으로 변경하기 위해 점심시간에도 노트북을 놓칠 수가 없었다...

여러가지 방법으로 구글링 한 결과,
원하는 글을 발견하여 아래의 코드로 적용했더니,

import pandas as pd

df['date'] = pd.to_timedelta(df['date'], unit='D') + pd.to_datetime('1899-12-30')

float64 type의 엑셀 데이터를 첫번째 사진에 업로드한 엑셀 파일의 데이터대로 출력되었다.

[ 참고👇 ]
https://stackoverflow.com/questions/62208207/convert-from-float-to-datetime-in-python




참고로,
lagacy code에서
openpyxl 을 이용할땐,
아래의 코드를 적용해서 작성하였다.

# 각각의 엑셀 데이터를 str 으로 변환해서 비교했다.

str(datetime.utcfromtimestamp((excel_date - 25569) * 86400.0))`
profile
차근차근 배워나가는 주니어 개발자

0개의 댓글