어제 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))`