Pandas日期筛选求助:筛选指定日期之后的数据
问题解决:筛选DataFrame中晚于指定日期的行
你的代码未得到预期结果的核心原因是:date列存储的是字符串类型,而非Pandas可识别的datetime格式。直接用字符串与pd.Timestamp比较会遵循字符串排序规则,无法正确实现日期逻辑判断。
解决方案步骤
- 第一步:将
date列转换为Pandas的datetime类型(关键步骤) - 第二步:用转换后的日期列与指定日期进行比较筛选
修改后的代码
场景1:读取Excel文件时直接解析日期
import pandas as pd # 读取时指定解析date列,同时设置dayfirst=True适配日/月/年格式 df1 = pd.read_excel('test_date.xlsx', engine='openpyxl', parse_dates=['date'], dayfirst=True) start_date = pd.Timestamp(2024, 5, 1) filtered_date = df1.loc[df1['date'] > start_date] filtered_date.to_csv("filtered.csv", index=False)
场景2:使用测试生成数据时转换日期
import pandas as pd data = {'serial': [10037, 10140, 10167, 10173, 10175, 10184, 10187], 'date': ['28/05/2020 00:00', '14/09/2021 00:00', '27/05/2023 00:00', '15/05/2024 00:00', '21/07/2024 00:00', '21/07/2024 00:00', '19/06/2024 00:00']} df1 = pd.DataFrame(data) # 将字符串格式的date列转换为datetime类型,指定dayfirst=True避免解析错误 df1['date'] = pd.to_datetime(df1['date'], dayfirst=True) start_date = pd.Timestamp(2024, 5, 1) filtered_date = df1.loc[df1['date'] > start_date] print(filtered_date)
验证方法
执行print(df1['date'].dtype),若输出为datetime64[ns],说明日期列已正确转换,此时再做比较筛选就能得到预期结果(晚于2024年5月1日的行)。
内容的提问来源于stack exchange,提问作者syed
相关产品推荐
相关产品推荐

