pandas -具有日期对象的条件逻辑 [英] Pandas - Conditional Logic with Date Objects

查看:60
本文介绍了 pandas -具有日期对象的条件逻辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尽管我检查了我的熊猫列,但它返回的dtype为 dtype:datetime64 [ns] ,但我无法在我的下面获取下面的两列要在条件语句(完成日期< Original_Due_Date)中进行比较的代码。请注意,Completed_Date列在代码中较早时用于与日期进行比较,并且在那里可以使用。

It seems that despite the fact when I check my pandas columns and it returns a dtype of dtype: datetime64[ns], I cannot get the two columns below in my code to compare during a conditional statement (Completed Date < Original_Due_Date).Mind, the Completed_Date column was used earlier in the code to compare against a date and it worked there.

我得到的错误源于底部的第4行:复制在下面

The error I get stems from the line 4 lines up from the bottom: copied below

finaldf.loc[(finaldf['Original_Due_Date' >= 'Completed_Date'),'On_Time_Units'] = 'Order_Qty'

错误:

 ValueError: could not convert string to Timestamp

以下完整代码(由于数据集是私有的,因此无法发布数据集)

Full code below (cannot post data set because it is private)

if day_of_week !=0:
    finaldf['Completed_Date'] = pd.to_datetime(finaldf['Completed_Date'], format="%m/%d/%Y")
    finaldf['Due_Date'] = pd.to_datetime(finaldf['Due_Date'], format="%m/%d/%y") # making it lower case y made it work
    current_week_flags = (finaldf.Completed_Date >= last_monday) & (finaldf.Completed_Date <= today)
    finaldf.loc[(finaldf['Completed_Date'] >= last_monday) & (finaldf['Completed_Date'] <= today) & (finaldf['Due_Date'] < last_monday), 'Due_Date'] = last_monday
    #appears to be working great as of 4.17
    finaldf = finaldf.merge(origdue, on='Work_Order', how= 'left') #vlookup, puts column on outer right 
    finaldf = finaldf.merge(rcode, on='Work_Order', how= 'left')

    #above was working on 4.17
    test = (finaldf.Due_Date >= last_monday) & (finaldf.Due_Date < today)
    finaldf = finaldf[test]
    #above we filtered for the date range, mind the test is  boolean, that called it back in if the value is true

    finaldf = finaldf[finaldf.WO_Stat.str.contains('Complete', na=False)] #make df only contain complete orders
    #the above appears to work great as of 4.18

    #newcolumns = ['Days_Late', 'New_Days_Late', 'Status', 'Day', 'On_Time/Late', 'Cust_PO_#&_WO']
    #finaldf = finaldf.reindex(columns = newcolumns)
    finaldf = finaldf.assign(Days_Late = "", New_Days_Late="", Status="", Day="", On_Time_or_Late="", Cust_PO_WO="", On_Time_Units="", On_Time_Orders="")
    finaldf = finaldf[['column1,column2,Original_Due_Date,column3']]
    #finaldf['Completed_Date'] = pd.to_datetime(finaldf['Completed_Date'], format="%m/%d/%Y").dt.date()
    #finaldf['Orginal_Due_Date'] = pd.to_datetime(finaldf['Original_Due_Date'], format="%m/%d/%Y").dt.date()
    finaldf.loc[(finaldf['Original_Due_Date']>= 'Completed_Date'),'On_Time_Units'] = 'Order_Qty'
    writer = pd.ExcelWriter('currentweek.xlsx', engine='xlsxwriter')
    finaldf.to_excel(writer, index=False, sheet_name='Sheet1')    
    writer.save()


推荐答案

这是什么意思?

finaldf['Original_Due_Date' >= 'Completed_Date'

语法上不正确,应该是

finaldf['Original_Due_Date'] >= 'Completed_Date'

即使如此,您仍将时间戳 finaldf ['Original_Due_Date'] )与 str 'Completed_Date'),因此出现错误。我猜你的意思是:

Even then, you are comparing Timestamp (finaldf['Original_Due_Date']) to str ('Completed_Date'), hence the error. I guess what you meant is:

finaldf['Original_Due_Date'] >= finaldf['Completed_Date']

PS:如果可行,别忘了投票并接受答案:D。

PS: If it works, don't forget to upvote and accept the answer :D.

PPS:编辑更新的问题:

PPS: Edit for updated questions:

flags = (finaldf['Original_Due_Date'] >= finaldf['Completed_Date'])

finaldf.loc[flags, 'On_Time_Units'] = finaldf.loc[flags, 'Order_Qty']

就是这样,我不再回答其他问题。

That's it, I ain't answer no more question.

finaldf.loc[(finaldf['Original_Due_Date']>= finaldf['Completed_Date']),'On_Time_Units'] = finaldf.Order_Qty

这也有效:)

这篇关于 pandas -具有日期对象的条件逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆