如何修正pandas DataFrame倒置日期格式解决np.busday_count报错
问题修复方案
你之前的转换代码无效核心原因是参数用错了:dayfirst=True仅适用于日在最开头的日期格式(比如dd-mm-yyyy/dd/mm/yyyy),但你的Data Faturamento列是年-日-月的特殊结构,pandas默认按年-月-日规则解析,自然会把日月位置搞反,还保留了原始数据里的时分秒。
最简便的修复方式是解析时明确指定日期格式,不要让pandas自动猜格式,转完后抹掉时分秒即可,最终输出和Data Entrega列类型、格式完全一致,可直接传给np.busday_count()使用:
baseFinal["Data Faturamento"] = pd.to_datetime( baseFinal["Data Faturamento"], format="%Y-%d-%m %H:%M:%S" ).dt.normalize()
代码说明
format="%Y-%d-%m %H:%M:%S":明确告诉pandas解析规则:第一位是4位年份、第二位是日期、第三位是月份,后半段是时分秒,从根源避免日月解析错位.dt.normalize():把所有日期的时间部分重置为当日0点,最终返回的列dtype仍为datetime64[ns],和你现有Data Entrega列的格式完全匹配,显示效果就是纯yyyy-mm-dd的日期,不带时分秒
之前代码的问题
- 错用
dayfirst=True:该参数无法识别年开头、日在第二位的格式,解析阶段就把日月搞反了,后续不管怎么转类型,日期值本身都是错的 - 用
.values.astype('datetime64[D]')虽然能去掉时分秒,但建立在前面解析错误的基础上,结果自然不符合预期
转完后可以用以下代码快速校验结果:
print(baseFinal[["Data Faturamento", "Data Entrega"]].head())
如果存在少量格式不匹配的异常值,可以在pd.to_datetime()里加errors='coerce'参数,把解析失败的值转为空值NaT方便后续排查。
内容的提问来源于stack exchange,提问作者Luiz Ribeiro
相关产品推荐
相关产品推荐

