Pandas dataframe的datetime列四舍五入到最近小时问题
问题原因
dt.hour本身是整数类型,round(dt.hour)的计算结果和原值完全一致,不会触发小时的调整逻辑- 你当前的代码是对小时、分钟两个字段独立做四舍五入,没有实现联动计算,分钟≥30需要给小时进位的规则没有覆盖,甚至当分钟round后等于60时,还会抛出参数范围错误(datetime类型的分钟合法取值范围为0-59)
解决方案
直接使用pandas datetime序列内置的round方法,指定舍入频率为1小时即可,无需手写apply自定义逻辑,运算效率更高也不会出现边界错误:
import pandas as pd # 首先确保date列是datetime格式,如果已经完成类型转换可以跳过该行 tweet_and_price_df["date"] = pd.to_datetime(tweet_and_price_df["date"]) # 直接将日期列舍入到最近的小时 tweet_and_price_df["date"] = tweet_and_price_df["date"].dt.round("H")
如果确实需要自定义逻辑实现舍入,需要额外判断分钟是否≥30、小时进位后是否超过23需要跨天等边界场景,逻辑相对繁琐,优先使用内置方法即可。
内容的提问来源于stack exchange,提问作者jd_h2003
相关产品推荐
相关产品推荐

