/ / pandas dataframe, як порівнювати datetime, ігноруючи дату - python, pandas, datetime, dataframe

Pandas dataframe як порівняти datetime з ігноруванням дати - python, pandas, datetime, frame

Вбудована функціональність 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])