programing

engine='openpyxl'로 panda.read_filse를 작동시키는 방법은 기본적으로 나노초를 표시하지 않고 xlrd와 같이 작동합니까?

newsource 2023. 9. 12. 20:02

engine='openpyxl'로 panda.read_filse를 작동시키는 방법은 기본적으로 나노초를 표시하지 않고 xlrd와 같이 작동합니까?

Excel .xlsx 스프레드시트에서 팬더 데이터프레임으로 데이터를 읽어오는 프로세스가 있습니다.최신 버전의 판다(1.2.1)로 업그레이드를 시도하던 중, 판다를 위한 문서에서 다음과 같은 내용을 보았습니다.read_excel의 기능을 다.engine인수:

  • "openpyxl"은 최신 엑셀 파일 포맷을 지원합니다.

버전 1.2.0에서 변경됨: 엔진 xlrd는 이제 이전 스타일의 .xls 파일만 지원합니다.

그래서 제가.engine='openpyxl'나에게read_excel함수 호출을 하고 이상하고 새로운 동작을 보기 시작했습니다. 이로 인해 date time 값은 기본적으로 nan seconds로 표시되고 있었습니다.xlrd. 게다가 저는 엑셀에서 본 예상치와 몇 나노초 차이가 나는 데이트 시간을 보고 있었습니다.저도 팬더 1.2.1과 1.1.4에서도 같은 것을 보았습니다.

다음 Excel 데이터의 경우 (원시값은 9/24일의 경우 44098.04166667, 9/9일의 경우 44083.6847222222로 나타남)

enter image description here

다음과 같은 행동이 보입니다.

>>> import pandas as pd
>>> pd.read_excel('~/testDatetimeNanos.xlsx')
             TestDate
0 2020-09-24 01:00:00
1 2020-09-09 16:26:00
2 2020-09-09 16:26:00
>>> pd.read_excel('~/testDatetimeNanos.xlsx', engine='openpyxl')
                    TestDate
0 2020-09-24 01:00:00.000003
1 2020-09-09 16:25:59.999998
2 2020-09-09 16:26:00.000000

새로운 오픈pyxl 엔진을 사용하여 기존 xlrd 엔진과 동작이 일치하도록 하는 방법이 없을까요?
또한 버그(업데이트: 제출된 버그 보고서)를 우연히 발견한 것은 아닌지 궁금합니다.

openpyxl ≥3.0.7 현재 버그 수정 완료(2021년 8월)

엔진과 openpyxl 버전에 관계없이 다음과 같이 나노초를 간단히 제거할 수 있습니다.

df['testDate'] = df['testDate'].str[:-7]

#              testDate
#0  2020-09-24 01:00:00
#1  2020-09-09 16:25:59
#2  2020-09-09 16:26:00

언급URL : https://stackoverflow.com/questions/66037692/how-to-make-pandas-read-excel-with-engine-openpyxl-behave-like-it-did-with-xlr