在python中基于日期列表过滤数据帧

2024-04-26 02:58:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧

                             response
01/09/2020 07:00:00 AM         1.345
01/09/2020 07:01:00 AM         2.567
01/09/2020 07:02:22 AM         5.999
01/09/2020 07:03:30 AM         4.800
01/09/2020 07:04:07 AM         8.720
01/09/2020 07:05:09 AM         0.999
... 
02/05/2020 11:57:42 PM         8.213
02/05/2020 11:58:03 PM         2.873
02/05/2020 11:59:55 PM         3.875

我想筛选出与此日期列表对应的行

list =  [01/10/2020, 01/11/2020, 01/14/2020, 01/16/2020, 01/20/2020, 02/01/2020, 02/03/2020, 02/04/2020]

有多个时间对应于天,我想保留所有时间,只删除不在日期列表中的行

我是Python新手,已经为此奋斗了很长一段时间,非常感谢您的帮助。谢谢大家!


Tags: 数据列表response时间amlist新手pm
2条回答

首先,您需要将“日期\时间”列更改为“仅日期\时间”(或添加新的“仅日期\时间”列) 然后应用适当的过滤器,假设您正在使用pandas,您可以执行以下操作

# assuming your first column name is 'date_time'
df['date_only'] = df['date_time'].dt.date
df = df[~df.date_only.isin(list_of_dates)]

您可以使用isin检查日期列表中的成员身份。确保日期列表为datetime,并且使用数据帧日期的floor

dates = pd.to_datetime(dates) # list in your original
df = df[df.index.floor('D').isin(dates)]

完整示例:

import pandas as pd
import numpy as np

dr = pd.date_range('01-01-2020', '01-10-2020', freq='D')
df = pd.DataFrame({'response':np.random.rand(len(dr))}, index=dr)

dates = ['01-01-2020', '01-05-2020', '01-07-2020']
dates = pd.to_datetime(dates)

df = df[df.index.floor('D').isin(dates)]

相关问题 更多 >