Wenn ich mit pandas.read_excel ein Excel-Datum lese, werden die Daten aufgrund der Formatierung zu einer Seriennummer. Ich habe mich für die Konvertierung entschieden, weil ich sie einheitlich mit datetime.datetime verarbeiten möchte.
--Referenz
# date_int :Serienwert
if date_int < 60:
# 1900-03-Vor 01
days = date_int -1
else:
# 1900-03-Für 01 oder später
days = date_int - 2
date_time = pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)
--Umgebung --macOS Catalina Version 10.15.7
Die zu lesende Excel-Datei sieht folgendermaßen aus
import datetime
import pandas
def get_datetime(val: object) -> datetime.datetime:
"""Holen Sie sich das Datum.
:param val:Der ursprüngliche Wert des Datums
:return:Datum, wenn Datum oder Seriennummer, sonst keine
"""
val_type = type(val)
# datetime.Wenn es datetime ist, geben Sie es so zurück, wie es ist
if val_type is datetime.datetime:
return val
# pandas.Zeitstempel ist Datum / Uhrzeit.Es erbt datetime und datetime.Es scheint, dass es als Datum / Uhrzeit verarbeitet werden kann. Geben Sie es also so zurück, wie es ist
if issubclass(val_type, datetime.datetime):
return val
#Wenn es int ist, wird datetime als serieller Wert angegeben.In Datum / Uhrzeit konvertieren und zurückkehren
if val_type is int:
if val < 60:
# 1900-03-Vor 01
days = val -1
else:
# 1900-03-Für 01 oder später
days = val - 2
return pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)
return None
if __name__ == '__main__':
#Laden Sie Excel mit Pandas
sheet = pandas.read_excel('Book.xlsx', sheet_name='Sheet1', header=None)
for index, row in sheet.iterrows():
date = get_datetime(row[0])
if date is not None:
print(date.strftime('%Y/%m/%d'))
Ausgabe
2020/10/14
2020/10/15
2020/10/16
2020/10/17
Recommended Posts