Python处理Excel日期列报错:datetime与time类型无法比较
问题与解决方案
问题详情
读取含日期列的Excel表格后,Paid Start Date列同时存在两种数据类型:部分是带日期的datetime.datetime(如第29000行的datetime.datetime(2022, 8, 10, 0, 0)),部分是仅含时间的datetime.time(如00:00:00),列的dtype为object。调用sheets['Paid Start Date'].min()或sheets['Paid Start Date'].max()时触发错误:
TypeError: '<=' not supported between instances of 'datetime.time' and 'datetime.datetime'
解决方法
1. 统一转换为datetime类型(补默认日期)
若纯时间值对应默认日期(如Excel起始日期1900-01-01),可遍历列将datetime.time转为datetime.datetime:
from datetime import datetime, date, time import pandas as pd def convert_time_to_datetime(val): if isinstance(val, datetime): return val elif isinstance(val, time): return datetime.combine(date(1900, 1, 1), val) return pd.NaT sheets['Paid Start Date'] = sheets['Paid Start Date'].apply(convert_time_to_datetime)
转换后列类型变为datetime64[ns],可正常调用min()、max()。
2. 将纯时间值转为空值(NaT)
若纯时间值为无效数据,直接转为NaT,计算时自动忽略:
import pandas as pd from datetime import datetime sheets['Paid Start Date'] = sheets['Paid Start Date'].apply( lambda x: x if isinstance(x, datetime) else pd.NaT ) # 调用min/max,默认跳过空值 min_date = sheets['Paid Start Date'].min() max_date = sheets['Paid Start Date'].max()
3. 读取Excel时强制解析日期(推荐)
若Excel原始数据应为日期格式,读取时指定parse_dates参数强制解析:
import pandas as pd sheets = pd.read_excel('your_excel_file.xlsx', parse_dates=['Paid Start Date'])
此方法可从源头避免类型混合问题,若仍有纯时间单元格,再结合上述方法二次处理。
内容的提问来源于stack exchange,提问作者Ali khan
相关产品推荐
相关产品推荐

