Pandas筛选start_time晚于指定天数行时出现Series无date属性错误如何解决
问题原因
你调用.date()的对象是old_df.start_time,这是pandas的Series序列对象,只有单个Python datetime类型的对象才支持.date()方法,序列类的时间数据需要通过pandas提供的.dt访问器调用时间处理方法。
正确实现代码
写法1:按你原逻辑修改
首先先确保start_time列已经是pandas datetime类型,之后用.dt.date批量获取整列的日期值:
# 可选:如果start_time不是datetime格式先执行转换 old_df['start_time'] = pd.to_datetime(old_df['start_time']) df_removed = old_df[(current_date - old_df.start_time.dt.date).dt.days <= days_range_to_retain]
写法2:更高效的优化写法
不需要逐行计算日期差值,直接算出保留的时间阈值后做大小比较即可,性能更高:
# 计算最早需要保留的时间阈值 cutoff_time = pd.Timestamp(current_date) - pd.Timedelta(days=days_range_to_retain) df_removed = old_df[old_df.start_time >= cutoff_time]
内容的提问来源于stack exchange,提问作者Sultanust
相关产品推荐
相关产品推荐

