Как прочитать столбец Excel как datetime.datetime вместо автоматического datetime.time

Я пытаюсь выбрать строки кадра данных pandas в диапазоне дат. Кадр данных загружается из Excel, и дата автоматически сохраняется как datetime.time, что вызывает проблемы при сравнении с datetime.datetime.

Я попытался преобразовать datetime.time в datetime.datetime, используя pd.to_datetime, но это не сработало, возможно, потому, что оно находится в DF. Я попытался установить столбец в datetime.datetime, когда он читается. Я пытался преобразовать в datetime.datetime во время чтения. Ни один из них не работал. Столбец называется Sub_End и представляет собой просто 5-значное число с форматом даты, например, 42636 — это 23 сентября 2016 года.

Вот некоторые из попыток загрузки, которые я сделал:

Subadvisory_Advisor_Fires=pd.read_excel('SOLO_Advisor_Data.xlsx',sheetname='Advisor_Fires', dtype = {'Sub_End': date})

Это прочитало файл без проблем, но столбец все еще был datetime.time

Subadvisory_Advisor_Fires=pd.read_excel('SOLO_Advisor_Data.xlsx',sheetname='Advisor_Fires',  converters= {'Sub_End': pd.to_datetime})

Я получил ошибку на этом: TypeError: не конвертируется в дату и время

Subadvisory_Advisor_Fires=pd.read_excel('SOLO_Advisor_Data.xlsx',sheetname='Advisor_Fires', dtype = {'Sub_End': datetime.datetime})

Это прочитало файл без проблем, но столбец все еще был datetime.time

Код с ошибкой:

Advisor_Fires=Subadvisory_Advisor_Fires
Start_Datetime = datetime.datetime(2016, 12, 31)
End_Datetime = datetime.datetime(2018, 12, 31)
Advisor_Fires = Advisor_Fires[(Advisor_Fires['Sub_End']).between(Start_Datetime, End_Datetime)]

Ошибка, которую я получаю:

TypeError: can't compare datetime.time to datetime.datetime

Я просто пытаюсь ограничить строки, включив в них ту, где они находятся между этими двумя датами. Ничто из того, что я пробовал, не позволяло дате в файле Excel правильно читаться как даты.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я уверен, что есть более простой способ сделать это, но я заставил это работать

Subadvisory_Advisor_Fires=pd.read_excel('SOLO_Advisor_Data.xlsx',sheetname='Advisor_Fires', converters = {'Sub_End':str})
Year = Subadvisory_Advisor_Fires['Sub_End'].str.slice(0, 4)
Month = Subadvisory_Advisor_Fires['Sub_End'].str.slice(5, 7)
Day = Subadvisory_Advisor_Fires['Sub_End'].str.slice(8, 10)

Year = pd.to_numeric(Year, errors='coerce')
Month = pd.to_numeric(Month, errors='coerce')
Day = pd.to_numeric(Day, errors='coerce')

Dates = pd.to_datetime((Year*10000+Month*100+Day).apply(str),format='%Y%m%d')
Subadvisory_Advisor_Fires['Sub_End_Converted'] = Dates

Другие вопросы по теме