Ошибка типа: неподдерживаемые типы операндов для -: 'datetime.datetime' и 'datetime.time' - PullRequest
0 голосов
/ 21 февраля 2019
import pandas as pd
import datetime


df = pd.read_excel('c:/users/user/documents/finance deck coils data.xlsx')
df = df[['Coil Number','Amnt Left'] ]


df2 = pd.read_excel('c:/users/user/documents/Deck Coils Data.xlsx')
df3 = pd.merge(df, df2, how='right', on='Coil Number')

writer = pd.ExcelWriter('c:/users/user/documents/test.xlsx')
df3.to_excel(writer, sheet_name = 'Original', index=False)
df3.loc[df3['Recieved Date'].isnull()].to_excel(writer, sheet_name= 'Zero Fifo', index=False)
df3.loc[(datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(180)].to_excel(writer, sheet_name= 'Under 6 Months', index=False)
df3.loc[((datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(181)) & ((datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(365))].to_excel(writer, sheet_name= '6 to 12 Months', index=False)
df3.loc[((datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(366)) & ((datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(730))].to_excel(writer, sheet_name= '12 to 24 Months', index=False)
df3.loc[(datetime.datetime.now() - df3['Recieved Date']) >= datetime.timedelta(731)].to_excel(writer, sheet_name= 'Over 24 Months', index=False)
writer.save()

Я получаю сообщение об ошибке в этой строке:

df3.loc[(datetime.datetime.now() - df3['Recieved Date']) <= datetime.timedelta(180)].to_excel(writer, sheet_name= 'Under 6 Months', index=False)

df3 ['Дата получения'] тип данных - объект.Я не знаю, нужно ли мне конвертировать его в дату и время.Как бы я это сделал?Формат даты следующий:

2017-06-22 00: 00: 00

1 Ответ

0 голосов
/ 21 февраля 2019

Я бы использовал инструмент разбора в модуле datetime, чтобы преобразовать весь столбец «Дата получения» в объект datetime.Предполагая, что время соответствует 12-часовым часам, для заданного вами формата даты оно будет выглядеть примерно так:

def parse_datetime(date_to_convert):
    pattern = "%Y-%m-%d %I:%M:%S"
    return datetime.datetime.strptime(date_to_convert,pattern)

Затем вы можете применить его к кадру данных следующим образом:

df3['Received Date'] = df3['Received Date'].apply(lambda row: parse_datetime(row))

Вы также можете добавить обработку ошибок в функцию, если есть значения, которые вы не хотите анализировать.

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