Python使用pandas按日期过滤DataFrame datetime列报错问题求解
报错原因梳理
- 前两次尝试:
pd.to_datetime(less_hot_df['date_time']).dt.date返回的是仅包含日期值的Series,而非DataFrame,第二次直接将该Series赋值给date_df后,date_df不存在date_time字段,触发KeyError。同时dt.date会将pandas内置的datetime64类型转为Python原生date对象,属于object类,无法使用pandas的时间范围切片功能。 - 第三次尝试:你将时间列转成datetime类型的操作仅赋值给了
date_df的字段,原less_hot_df的date_time列仍为字符串类型,和带时区的Timestamp对象做比较时触发类型不匹配报错。
正确操作步骤
- 先将原DataFrame的
date_time列转换为带UTC时区的datetime类型,直接覆盖原列:
less_hot_df['date_time'] = pd.to_datetime(less_hot_df['date_time'], utc=True)
- 按需求选择筛选方式:
方式一:布尔索引筛选(无需修改索引)
start_date = pd.to_datetime('2014-03-01 06:00', utc=True) end_date = pd.to_datetime('2014-05-30 18:00', utc=True) result_df = less_hot_df[(less_hot_df['date_time'] > start_date) & (less_hot_df['date_time'] < end_date)]
方式二:时间索引切片(代码更简洁)
# 将date_time列设为索引 less_hot_df = less_hot_df.set_index('date_time') # 直接按时间范围切片 result_df = less_hot_df['2014-03-01':'2014-05-30']
内容的提问来源于stack exchange,提问作者Azurespot
相关产品推荐
相关产品推荐

