Python Pandas:根据时间范围删除时间序列的行

新手上路,请多包涵

我有以下时间序列:

 start = pd.to_datetime('2016-1-1')
end = pd.to_datetime('2016-1-15')
rng = pd.date_range(start, end, freq='2h')
df = pd.DataFrame({'timestamp': rng, 'values': np.random.randint(0,100,len(rng))})
df = df.set_index(['timestamp'])

我想删除这两个时间戳之间的行:

 start_remove = pd.to_datetime('2016-1-4')
end_remove = pd.to_datetime('2016-1-8')

我怎样才能做到这一点?

原文由 jim jarnac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 666
2 个回答

使用 query

 df.query('index < @start_remove or index > @end_remove')

使用 loc

 df.loc[(df.index < start_remove) | (df.index > end_remove)]

使用日期切片

这包括端点

pd.concat([df[:start_remove], df[end_remove:]])

没有终点

pd.concat([df[:start_remove], df[end_remove:]]).drop([start_remove, end_remove])

原文由 piRSquared 发布,翻译遵循 CC BY-SA 3.0 许可协议

df = df.drop(pd.date_range('2018-01-01', '2018-02-01')), errors='ignore')

原文由 Joe Heffer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题