Предполагая, что это необработанные данные (с индексом Datetime
)
dft = pd.DataFrame(np.random.randn(100000,1), columns=['A'],
index=pd.date_range('20130101',periods=100000,freq='T'))
dft.head()
A
2013-01-01 00:00:00 0.313644
2013-01-01 00:01:00 0.458860
2013-01-01 00:02:00 0.841434
2013-01-01 00:03:00 -0.135846
2013-01-01 00:04:00 -0.881316
Для 1), просто используйте .isin()
myDates = ['2013-01-02', '2013-01-04', '2013-01-06']
# to get data in list
df_in = dft[pd.to_datetime(dft.index.date).isin(myDates)]
df_in.head()
A
2013-01-02 00:00:00 0.444005
2013-01-02 00:01:00 -0.073561
2013-01-02 00:02:00 0.256737
2013-01-02 00:03:00 1.304807
2013-01-02 00:04:00 -0.741956
# to get data not in list
df_not_in = dft[~pd.to_datetime(dft.index.date).isin(myDates)]
df_not_in_list.head()
A
2013-01-01 00:00:00 -0.944070
2013-01-01 00:01:00 0.225456
2013-01-01 00:02:00 0.571424
2013-01-01 00:03:00 -0.004389
2013-01-01 00:04:00 0.933229
Для 2), если я правильно понимаю, вы хотите выбрать данные, используя несколько срезов даты и времени. Для этого вы можете использовать несколько индексных масок из вложенного списка для фильтрации по дате
myDates = [['2013-01-02','2013-01-03'],
['2013-01-05','2013-01-07'],
['2013-01-09','2013-01-11']]
df_masked = dft[
(dft.index >= myDates[0][0]) & (dft.index <= myDates[0][1]) & \
(dft.index >= myDates[1][0]) & (dft.index <= myDates[1][1]) & \
(dft.index >= myDates[2][0]) & (dft.index <= myDates[2][1])
]