如何在Pandas中筛选时间早于18:30的DataFrame行?
Pandas筛选早于下午6:30的行解决方案
你的代码报错是因为time列是字符串类型,不是Pandas的datetime格式,无法直接通过.dt.time调用时间属性。按以下步骤即可实现需求:
1. 转换时间列格式
先把字符串格式的时间转为Pandas可识别的datetime类型,它会自动处理AM/PM:
import pandas as pd # 初始化数据 df = pd.DataFrame([["A","11:40 AM"],["B","12:51 PM"],["C","6:33 PM"],["D","11:13 AM"],["E","7:13 PM"]],columns=["id","time"]) # 转换为datetime类型 df['time'] = pd.to_datetime(df['time'], format='%I:%M %p')
2. 筛选符合条件的行
有两种简单的筛选方式:
- 用datetime.time对象比较:
from datetime import time filtered_df = df[df['time'].dt.time < time(18, 30)] - 直接与字符串时间比较(Pandas会自动解析):
filtered_df = df[df['time'] < '18:30:00']
3. 恢复原时间格式(可选)
如果需要把datetime类型转回原来的AM/PM字符串格式,执行:
filtered_df['time'] = filtered_df['time'].dt.strftime('%I:%M %p')
最终结果
处理后的filtered_df内容如下:
id time A 11:40 AM B 12:51 PM D 11:13 AM
内容的提问来源于stack exchange,提问作者Chethan
相关产品推荐
相关产品推荐

