熊猫日期计算

乔尔·马修(Joel G Mathew)

我刚刚开始学习python,并试图使其对我的工作有用。

我的目标是从excel文件中读取具有以下格式数据的表,并对其进行一些计算:这是员工工作天数的服务记录:

Day from    Day to
01/09/12    31/08/13
04/07/15    10/11/15
11/11/17    

在最后一行中,未提供Day to,并将其作为当前日期。

我写了以下内容:

import pandas
db=pandas.read_excel('earnedleaves.xls')
from datetime import datetime
def Calc_Days_Worked(dtentry, dtexit):
    if type(dtexit) is pandas._libs.tslib.NaTType:
        dtexit = pandas.Timestamp.now.to_pydatetime()        
        return (dtexit-dtentry.to_pydatetime()).days

    return (dtexit.to_pydatetime()-dtentry.to_pydatetime()).days

for (dtfrom, dtto) in zip(db['Day from'], db['Day to']):    
  print (Calc_Days_Worked(dtfrom, dtto))

除最后一行遇到NaT类型外,它的运行效果非常好。我无法用该值减去天数,因为它返回错误。显然,我没有使用正确的数据类型。我一直在尝试在datetime和pandas Timestamp中使用各种类型,但是无法锻炼将当前日期转换为与pandas._libs.tslib.Timestamp兼容的类型的正确方法。

输出:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-52-b44dc7b7c4c2> in <module>()
      2     print (dtfrom, dtto)
      3 #     print (type(dtfrom))
----> 4     print (Calc_Days_Worked(dtfrom, dtto))

<ipython-input-51-0e4a2d290dce> in Calc_Days_Worked(dtentry, dtexit)
      2 def Calc_Days_Worked(dtentry, dtexit):
      3     if type(dtexit) is pandas._libs.tslib.NaTType:
----> 4         dtexit = pandas.Timestamp.now.to_pydatetime()
      5         return (dtexit-dtentry.to_pydatetime()).days
      6 

AttributeError: 'cython_function_or_method' object has no attribute 'to_pydatetime'
耶斯列尔

我认为需要熊猫函数,因为使用NaNNaT值-首先转换column to_datetimes然后得到days

db['diff'] = (pd.to_datetime(db['Day to']) - pd.to_datetime(db['Day from'])).dt.days
print (db)
   Day from    Day to   diff
0  01/09/12  31/08/13  600.0
1  04/07/15  10/11/15  187.0
2  11/11/17       NaN    NaN

另外,如果需要稍后处理日期时间:

db['Day to'] = pd.to_datetime(db['Day to'])
db['Day from'] = pd.to_datetime(db['Day from'])
db['diff'] = (db['Day to'] - db['Day from']).dt.days
print (db)
    Day from     Day to   diff
0 2012-01-09 2013-08-31  600.0
1 2015-04-07 2015-10-11  187.0
2 2017-11-11        NaT    NaN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章