панды сравнивают поле даты и времени с учетом часового пояса по минутам - PullRequest
1 голос
/ 17 мая 2019

У меня есть объект datetime, подобный следующему:

df.iloc[:10]
0   2019-03-05 00:45:36.503277422+08:00
1   2019-03-05 00:46:36.404034571+08:00
2   2019-03-05 00:47:36.434888822+08:00
3   2019-03-05 00:48:36.535496247+08:00
4   2019-03-05 00:49:36.512082457+08:00
5   2019-03-05 00:50:36.515718466+08:00
6   2019-03-05 00:51:36.520325894+08:00
7   2019-03-05 00:52:36.523945647+08:00
8   2019-03-05 00:53:36.548567617+08:00
9   2019-03-05 00:54:36.740268213+08:00
Name: Date-Time, dtype: datetime64[ns, Asia/Shanghai]

Я хотел бы получить все строки, если его время позже, чем 08:00:00 Asia/Shanghai время, что означает позже, чем 00:00:00 время UTC.У меня есть два вопроса:

  1. как записать условие по местному времени (Шанхай) вместо времени UTC.Только df[df>'2019-03-05 00:00:00'] возвращает True.Если я использую df[df>'2019-03-05 08:00:00'], все это будет False.

  2. , как использовать только время, а не указывать дату перед временем.Вместо того, чтобы писать df[df>'2019-03-05 00:00:00'], я хочу написать df[df>'00:00:00'] только время.

Большое спасибо!

1 Ответ

0 голосов
/ 17 мая 2019

Вы можете добавить информацию о часовом поясе к скалярной дате и времени и сравнить:

date = pd.to_datetime('2015-02-24').tz_localize('UTC').tz_convert('Asia/Shanghai')
print (date)
2015-02-24 08:00:00+08:00

Или:

date = pd.Timestamp('2015-02-24 08:00:00+08:00')

print (df[df > date])
0   2019-03-05 00:45:36.503277422+08:00
1   2019-03-05 00:46:36.404034571+08:00
2   2019-03-05 00:47:36.434888822+08:00
3   2019-03-05 00:48:36.535496247+08:00
4   2019-03-05 00:49:36.512082457+08:00
5   2019-03-05 00:50:36.515718466+08:00
6   2019-03-05 00:51:36.520325894+08:00
7   2019-03-05 00:52:36.523945647+08:00
8   2019-03-05 00:53:36.548567617+08:00
9   2019-03-05 00:54:36.740268213+08:00
Name: Date-Time, dtype: datetime64[ns, Asia/Shanghai]

А для второго сравнить по времени:

from datetime import time
print (df[df.dt.time > time(0,0,0)])
0   2019-03-05 00:45:36.503277422+08:00
1   2019-03-05 00:46:36.404034571+08:00
2   2019-03-05 00:47:36.434888822+08:00
3   2019-03-05 00:48:36.535496247+08:00
4   2019-03-05 00:49:36.512082457+08:00
5   2019-03-05 00:50:36.515718466+08:00
6   2019-03-05 00:51:36.520325894+08:00
7   2019-03-05 00:52:36.523945647+08:00
8   2019-03-05 00:53:36.548567617+08:00
9   2019-03-05 00:54:36.740268213+08:00
Name: Date-Time, dtype: datetime64[ns, Asia/Shanghai]

Или по timedeltas:

print (df[pd.to_timedelta(df.dt.strftime('%H:%M:%S')) > '00:00:00'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...