如何仅传入日期字符串从Pandas DataFrame提取单日数据?
当然有办法!不用写繁琐的时间范围,只传日期字符串就能轻松筛选当天数据,我给你几种实用的方案:
1. 提取日期部分直接匹配
首先确保你的date1列是datetime类型(如果还没转的话先执行这一步):
import pandas as pd df['date1'] = pd.to_datetime(df['date1'])
然后就可以通过dt.date提取日期部分,和目标日期对比:
target_date = "2000-01-01" # 把目标字符串转成date对象再匹配 result = df[df['date1'].dt.date == pd.to_datetime(target_date).date()]
2. 标准化时间到当日零点
用dt.normalize()把date1的时间部分统一转为00:00:00,再和目标日期的datetime对象比较:
result = df[df['date1'].dt.normalize() == pd.to_datetime(target_date)]
这个方法逻辑更清晰,而且返回的结果保留了原时间的精度。
3. 使用query()简化代码
如果你喜欢更简洁的语法,query()方法能让筛选表达式更直观:
result = df.query("date1.dt.date == @pd.to_datetime('2000-01-01').date()")
@符号用来引用外部变量,如果你把目标日期存在变量里,改成@target_date就行。
4. 利用日期范围(适合大数据量)
如果你的数据集很大,用between()方法配合日期范围会更高效:
start = pd.to_datetime(target_date) end = start + pd.Timedelta(days=1) # 包含start,不包含end,正好覆盖当天所有时间 result = df[df['date1'].between(start, end, inclusive='left')]
如果把date1设为索引,还能直接用切片,超级方便:
df = df.set_index('date1') # 直接写日期就会自动匹配当天所有时间段 result = df['2000-01-01']
这些方法都能帮你只用日期字符串完成筛选,不用再手动写时间边界啦!
内容的提问来源于stack exchange,提问作者Kavita
相关产品推荐
相关产品推荐

