Дата, отметки времени и datetime64 [нс, UTC] сравнение в python pandas - PullRequest
1 голос
/ 05 мая 2020

Я очень запутался из-за эффекта этого процесса фильтрации с использованием pandas DataFrames. Я пытаюсь получить строки, которые находятся между некоторыми датами, но мой результат DataFrame пуст. Я уверен, что данные за этот период есть.

df.info(), возвращающее 'opentime' - это тип: `opendate 440383 non-null datetime64 [ns, UTC]

Фрагмент кода:

from datetime import timedelta
from datetime import datetime

current_date = pd.datetime.now()
t_delta_week = timedelta(days=7)
t_delta_year = timedelta(days=365)

#CurrentDate
date_start2020 = pd.Timestamp(current_date - t_delta_week, unit='ms')
date_end2020 = pd.Timestamp(current_date, unit='ms')

date_start2020 = date_start2020.tz_localize('utc')
date_end2020 = date_end2020.tz_localize('utc')


#LastYearDate
date_start2019 = pd.Timestamp(current_date - t_delta_year - t_delta_week, unit='ms')
date_end2019 = pd.Timestamp(current_date - t_delta_year, unit='ms')

date_start2019 = date_start2019.tz_localize('utc')
date_end2019 = date_end2019.tz_localize('utc')


df2020_2019['opendate'] = pd.to_datetime(df2020_2019['opendate'], unit='ms') 
mask = (df2020_2019['opendate'] > date_start2020) & (df2020_2019['opendate'] <= date_end2020)
df_currYear = df2020_2019.loc[mask]

df_currYear

Возвращенный DataFrame пусто

Спасибо за помощь! :)

РЕДАКТИРОВАТЬ:

Возможно, это может помочь: столбец 'opendate' создается с использованием этого фрагмента кода:

import pandas as pd
fmt = '%Y-%m-%dT%H:%M:%S'
df2020_2019.dropna(subset=['opentime_TS'], inplace=True)
df2020_2019['opendate'] = pd.to_datetime(df2020_2019['opentime_TS'], utc=True, format=fmt, errors='ignore')

Кроме того, я добавил несколько head() отпечатки образец данных . Я не могу предоставить запись df из-за конфиденциальности :)

1 Ответ

0 голосов
/ 05 мая 2020

Ладно, плохо. Я просто ослеп из-за сосредоточенности на tz TypeErrors ... Я взял неправильный источник данных, который уже устарел :) Окончательное решение, которое работает с правильными данными:

from datetime import timedelta
from datetime import datetime
import pandas as pd

fmt = '%Y-%m-%dT%H:%M:%S'
df2020_2019.dropna(subset=['opentime_TS'], inplace=True)
df2020_2019['opendate'] = pd.to_datetime(df2020_2019['opentime_TS'], utc=True, format=fmt, errors='ignore')
df2020_2019.info()

current_date = pd.Timestamp.now()
t_delta_week = timedelta(days=7)
t_delta_year = timedelta(days=365)

#CurrentDate
date_start2020 = pd.Timestamp(current_date - t_delta_week, unit='ms')
date_end2020 = pd.Timestamp(current_date, unit='ms')

date_start2020 = date_start2020.tz_localize('utc')
date_end2020 = date_end2020.tz_localize('utc')


#LastYearDate
date_start2019 = pd.Timestamp(current_date - t_delta_year - t_delta_week, unit='ms')
date_end2019 = pd.Timestamp(current_date - t_delta_year, unit='ms')

date_start2019 = date_start2019.tz_localize('utc')
date_end2019 = date_end2019.tz_localize('utc')

df2020_2019['opendate'] = pd.to_datetime(df2020_2019['opendate'], unit='ms') 

df_currYear = df2020_2019[df2020_2019["opendate"] > date_start2020]
df_lastYear = df2020_2019[df2020_2019["opendate"].between(date_start2019, date_end2019)]

df_currYear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...