Python如何筛选pandas DataFrame中2021-09-13至2021-09-16区间的行数据
问题原因
你之前的代码失效的核心原因是未将日期相关字段转为pandas datetime类型,字符串格式的日期切片不会按时间范围匹配,仅会匹配到完全对应起止值的行。
解决方案
推荐使用最稳妥的布尔筛选方案,无需依赖索引设置:
import pandas as pd # 第一步:将date列转为datetime格式 df['date'] = pd.to_datetime(df['date']) # 第二步:定义起止日期,做区间筛选 date_start = pd.to_datetime('2021-09-13') date_end = pd.to_datetime('2021-09-16') df = df[(df['date'] >= date_start) & (df['date'] <= date_end)]
如果要沿用你之前的索引切片写法,需要先把行索引转为DatetimeIndex并排序:
# 转换索引为datetime格式并排序 df.index = pd.to_datetime(df.index) df = df.sort_index() date_start = df['date'].iloc[-4] date_end = df['date'].iloc[-1] df = df.loc[date_start:date_end]
两种方案都可以得到你预期的4行结果。
内容的提问来源于stack exchange,提问作者kobo
相关产品推荐
相关产品推荐

