问题
I have a pandas DataFrame with a DateTimeIndex
:
A B
2016-04-25 18:50:06 440.967796 201.049600
2016-04-25 18:50:13 441.054995 200.767034
2016-04-25 18:50:20 441.142337 200.484475
...
2016-07-27 18:50:06 440.967796 201.049600
2016-07-27 18:50:13 441.054995 200.767034
2016-07-27 18:50:20 441.142337 200.484475
I would like to extract all the data of a given date yyyy-mm-dd
using a list of dates: ['2016-04-25','2016-04-28',...]
I tried the following:
df[df.index.isin(['2016-04-25', '2016-04-26'])]
Empty DataFrame
I would like to retrieve all the data (data of the whole day) of the dates given in this list
回答1:
You need remove times first by this solutions:
df = df[df.index.normalize().isin(['2016-04-25', '2016-04-26'])]
df = df[df.index.floor('D').isin(['2016-04-25', '2016-04-26'])]
Another solution is compare DatetimeIndex.date, but necessary use numpy.in1d instead isin
:
df = df[np.in1d(df.index.date, pd.to_datetime(['2016-04-25', '2016-04-26']).date)]
Or compare strings created DatetimeIndex.strftime:
df = df[np.in1d(df.index.strftime('%Y-%m-%d'), ['2016-04-25', '2016-04-26'])]
print (df)
A B
2016-04-25 18:50:06 440.967796 201.049600
2016-04-25 18:50:13 441.054995 200.767034
2016-04-25 18:50:20 441.142337 200.484475
来源:https://stackoverflow.com/questions/45945104/pandas-accessing-data-with-list-of-dates-and-datetimeindex