熊猫日期计算

时间:2018-04-08 18:23:38

标签: python pandas datetime

我刚刚开始学习python,并试图让它为我的工作做一些有用的事情。

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

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))

在最后一行中,未给出Day to,并将其视为当前日期。

我写了以下内容:

---------------------------------------------------------------------------
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'

除了遇到NaT类型的最后一行外,它的工作情况非常好。我无法使用此值减去天数,因为它返回错误。显然我没有使用正确的数据类型。我已经在datetime和pandas Timestamp中尝试了各种类型,但是无法正确地将当前日期转换为与pandas._libs.tslib.Timestamp兼容的类型

输出:

{{1}}

1 个答案:

答案 0 :(得分:2)

我认为需要pandas功能,因为同时使用NaNNaT值 - 首先转换列to_datetime然后获取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