如何将Excel列读取为datetime.datetime而不是自动datetime.time

时间:2019-06-28 20:26:23

标签: python

我正在尝试选择日期范围内的熊猫数据框的行。数据框是从Excel上传的,日期会自动保存为datetime.time,与datetime.datetime相比会出现问题。

我尝试使用pd.to_datetime将datetime.time转换为datetime.datetime,但是它不起作用,可能是因为它在DF中。我尝试在读取列时将其设置为datetime.datetime。我尝试在读取时转换为datetime.datetime。这些都不起作用。该列名为Sub_End,它只是一个具有日期格式的5位数字,例如42636是9/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文件中的日期正确地读取为日期。

1 个答案:

答案 0 :(得分:0)

我敢肯定有一种更简单的方法可以做到这一点,但我确实可以做到这一点

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