Вбудована функціональність datetime підтримуєпорівняння двох об'єктів datetime.datetime безпосередньо за допомогою "<> = ...". Тим не менш, я хотів би порівняти два datetime щодо тільки години і хвилини.
Наприклад, якщо у нас є "2016-07-01 11:00:00 "і" 2017-07-01 09:00:00 ", хочу сказати, що" 2016-07-01 11:00:00 "більше з 11:00> 9:00. -в функціональності, яку ми можемо використовувати.
Замість цього я робив такі речі, як порівняння кожного рядка
data = data[time_start.hour * 60 + time_start.minute
< (data["time"].hour * 60 + data["time"].minute)
< time_end.hour * 60 + time_end.minute ]
Але є помилка:
AttributeError: "Series" object has no attribute "hour"
Я використовую Python 2.7, це також проблема в Python 3?
Що було б гарним способом зробити таке порівняння? Дякую!
Відповіді:
2 для відповіді № 1Я використовую Python 2.7, це також проблема в Python 3?
Це не має нічого спільного з версією Python.
Якщо ви використовуєте pandas> 0.16, вам знадобиться використовувати dt
аксесуар:
data["time"].dt.hour
і data["time"].dt.minute
Наприклад:
import pandas as pd
import datetime as dt
df = pd.DataFrame({"a": [dt.datetime(2016, 7, 1, 11), dt.datetime(2017, 7, 7, 9)]})
df["b"] = df["a"].dt.hour
print(df)
# a b
# 0 2016-07-01 11:00:00 11
# 1 2017-07-07 09:00:00 9
df = df[df["a"].dt.hour > 10]
print(df)
# a b
# 0 2016-07-01 11:00:00 11
1 для відповіді № 2
Якщо введені дати є str і розташовані з yyyy-mm-dd hh: mm: ss, то чому б просто не порівняти це як рядок.
import pandas as pd
dates = [ "2016-07-01 11:00:00","2016-07-01 13:00:00","2016-07-01 15:00:00"]
df = pd.DataFrame(dates,columns=["dates"])
a = (df["dates"].str[-8:] > "09:00:00") & (df["dates"].str[-8:] <= "11:00:00")
print(df [a])