You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于时间过滤Pandas DataFrame?转换报错求助

问题分析与解决方案

核心问题

你的time列虽然显示为HH:MM:SS格式,但实际存储的是**datetime.time类型对象**,而非字符串。这直接导致两个问题:

  • 使用pd.to_datetime转换时,该函数无法直接将datetime.time对象转为datetime类型,触发TypeError
  • 直接字符串搜索无效,因为列中存储的不是字符串,无法匹配字符串条件

验证方法

执行以下代码可确认time列的实际类型:

print(events_df['time'].apply(type).unique())

输出会显示类似[<class 'datetime.time'>],验证上述结论。

解决方案

方案1:直接匹配datetime.time对象

将split_time转换为datetime.time类型,直接和列中的对象匹配:

from datetime import datetime

start_time = "25 September 2022, 13:00:00"
split_time = start_time.split(", ")[1]
# 把字符串时间转为datetime.time对象
target_time = datetime.strptime(split_time, "%H:%M:%S").time()

# 直接过滤time列
filtered_df = events_df.loc[events_df['time'] == target_time]

方案2:将time列转为字符串后匹配

如果更习惯字符串操作,先把time列转为字符串再过滤:

start_time = "25 September 2022, 13:00:00"
split_time = start_time.split(", ")[1]

# 将time列转为字符串格式
events_df['time_str'] = events_df['time'].astype(str)
# 按字符串匹配过滤
filtered_df = events_df.loc[events_df['time_str'] == split_time]

方案3:合并日期时间列(更推荐)

把start_date和time合并为完整的datetime列,后续可直接按完整时间过滤,避免日期和时间分开处理的麻烦:

from datetime import datetime

start_time = "25 September 2022, 13:00:00"
# 把目标时间转为datetime类型
target_datetime = datetime.strptime(start_time, "%d %B %Y, %H:%M:%S")

# 合并DataFrame中的日期和时间为完整datetime列
events_df['full_datetime'] = pd.to_datetime(
    events_df['start_date'].astype(str) + ' ' + events_df['time'].astype(str)
)

# 按完整datetime过滤
filtered_df = events_df.loc[events_df['full_datetime'] == target_datetime]

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:55:47