Pandas对datetime取整到最近秒却返回按天取整的日期是什么原因
问题原因及解决方案
核心原因分析
- 首先需要澄清:你观察到的「仅保留日期」大概率是pandas的默认显示优化,不是时分秒数据真的丢失。当datetime列所有值的时间部分均为
00:00:00时,pandas会自动隐藏时分秒字段仅展示日期,你可以执行print(df['timestamp'].apply(str))输出完整字符串格式的时间,验证实际存储的完整时间值。 - 你的样例时间
2018-06-01 23:59:59.894110毫秒部分超过500ms,用dt.round('1s')四舍五入到秒时会向上进1秒,最终得到2018-06-02 00:00:00,刚好是跨天的零点,所以展示时只显示了日期部分。 - 如果你的运行结果显示的是
2018-06-01而非2018-06-02,说明你实际运行的代码存在笔误,大概率是把取整单位误写为了按天取整的'1d'/'D',或者误用了dt.floor('1d')按天向下取整的方法,请检查代码拼写。
正确操作建议
如果你的需求是去除毫秒部分,不做四舍五入,请用向下取整方法:
df['timestamp'] = df.timestamp.dt.floor('1s')
如果你的需求确实是四舍五入到最近秒,确认代码拼写正确后,无需额外修改,展示省略的时分秒不影响后续时间计算,也可以通过pd.set_option('display.datetime_format', '%Y-%m-%d %H:%M:%S')强制设置pandas显示完整时间格式。
内容的提问来源于stack exchange,提问作者mankojag
相关产品推荐
相关产品推荐

