pd.to_datetime转换后max函数返回错误最大日期如何解决
问题原因及修复方案
核心问题点
- 你在
pd.to_datetime中设置的格式参数format = '%d.%m.%Y'和数据实际的斜杠分隔格式不匹配,导致绝大多数日期转换失败被置为空值,2021年的日期全部被识别为无效值丢失,这是你取不到31/08/2021的首要原因。 - 转换为日期类型后你立即调用
dt.strftime将列转回了字符串格式,字符串取最大值是按字典序比较而非日期逻辑,会进一步导致计算结果错误。 - 不需要额外调用re库提取年份,datetime类型自带年/月/日属性可直接读取。
修复后代码
# 日期列转换为datetime64类型,保留原始格式不要转字符串 file['Date'] = pd.to_datetime( file['Date'], errors='coerce', dayfirst=True, format='%d/%m/%Y' # 修正为和数据匹配的斜杠分隔格式 ) min_date = file['Date'].min() max_date = file['Date'].max() # 输出时再做格式转换,年份直接从datetime对象取 print( min_date.strftime('%d/%m/%Y'), max_date.strftime('%d/%m/%Y'), range(min_date.year, max_date.year) )
运行后即可输出你预期的01/01/1994 31/08/2021 range(1994, 2021)结果。
内容的提问来源于stack exchange,提问作者Sultry T.
相关产品推荐
相关产品推荐

