我正在尝试选择日期范围内的熊猫数据框的行。数据框是从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文件中的日期正确地读取为日期。
答案 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