У меня возникла глупая проблема, когда я не могу заставить фильтр предыдущего рабочего дня правильно работать в pandas. Я знаю, что решение, вероятно, простое, но я не могу туда добраться. Вот код, который я использую, который возвращает пустой фрейм данных. Причина, по которой я привожу переменную previous_day к datetime, заключается в том, что ранее в коде я привожу все свои даты к этому формату. Первоначально я думал, что проблема связана с типом даты, однако она сохраняется, несмотря ни на что.
import pandas as pd
from pandas.tseries.offsets import BDay
import datetime
today = datetime.datetime.today()
previous_day = pd.to_datetime(today - BDay(1))
df = df[(df['Invoice Submit Date - Date'] == previous_day)]
это возвращает следующее
Empty DataFrame
Columns: [Invoice Submit Date - Date, Invoice Number, Invoice ID, Invoice Date Created - Date,
Invoice Date - Date, Approved Date - Date, Invoice Status, Preparer - User, sum(Invoice Spend)]
Index: []
Обновление: это результат df.head()
@venky__ datetime64
format = "%Y/%m/%d"
df['Invoice Submit Date - Date'] = pd.to_datetime(df['Invoice Submit Date - Date'],format)
это то, что вам нужно где-то, прежде чем вы сравните даты ...
где строка формата соответствует дате и времени в загруженном кадре данных
Все равно получите тот же результат
Не могли бы вы распечатать df, чтобы мы могли увидеть данные?
df пуст, когда я запускаю эту команду. тип данных рассматриваемого поля - datetime64
Тогда нет «Даты отправки счета-даты» в предыдущий день.
Я по-прежнему получаю тот же результат: сегодня = datetime.datetime.today(),,,, previous_day = df['Дата отправки счета - Дата'] - BDay(1)..... df = df[(df ['Дата отправки счета - Дата'] == предыдущий_день)]
прямо при загрузке вашего фрейма данных вы можете ввести print(df.head()) и вставить результаты в вопрос?
я добавил это
Спасибо! format = "%Y-%m-%d"
df['Invoice Submit Date - Date'] = pd.to_datetime(df['Invoice Submit Date - Date'],format)
testdate = pd.to_datetime('2020-12-04',format='%Y-%m-%d')
dftest = df[df['Invoice Submit Date - Date'] == testdate]
print(dftest)
Это должно дать вам только строку номер 2. Это было бы хорошим испытанием.
Спасибо, Пол, мне нужно, чтобы тестовая дата была предыдущим рабочим днем, а не жестко закодированной датой. когда я пытаюсь использовать BDay, он по-прежнему не дает мне записей. предыдущий_день = df['Дата отправки счета - Дата'] - BDay(1) df = df[(df['Дата отправки счета - Дата'] == предыдущий_день)]
Это не самое элегантное решение, но это сработало для меня, если у других возникают проблемы:
import datetime as dt
import pandas as pd
from pandas.tseries.offsets import BDay
# filter on previous business day's date
today = dt.datetime.today()
df['previous_day'] = (today - BDay(1))
df['previous_day'] = df['previous_day'].dt.normalize()
previous_day = df['previous_day']
# new dataframe
df = df[(df['Invoice Submit Date - Date']) == previous_day]
Что такое dtype
df[Invoice Submit Date - Date]
?