Python / Pandas /数据框/计算日期差异

时间:2018-06-08 11:12:44

标签: python pandas datetime calculation

我有一个数据框,我正在做以下事情:

def calculate_planungsphase(audit, phase1, phase2):

datum_first_milestone = data_audit[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase1)]
datum_second_milestone = data_audit[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase2)]

print(datum_first_milestone['GeplantesErledigungsdatum'])
print(datum_second_milestone['GeplantesErledigungsdatum'])

print(datum_first_milestone['GeplantesErledigungsdatum'] - datum_second_milestone['GeplantesErledigungsdatum'])

印刷结果(datum_first_milestone [' GeplantesErledigungsdatum'])=

2018年1月1日 名称:GeplantesErledigungsdatum,dtype:datetime64 [ns]

打印结果(datum_second_milestone [' GeplantesErledigungsdatum'])=

2018-01-02姓名:GeplantesErledigungsdatum,dtype:datetime64 [ns]

差异计算的结果是:

0 NaT 1 NaT 姓名:GeplantesErledigungsdatum,dtype:timedelta64 [ns

为什么计算NaT的结果?当我只做一次计算时,为什么我有两个结果呢? (指数0和指数1 = NaT)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

存在不同索引值的问题,因此减法Series中没有对齐。

如果过滤的Series的大小相同,则可能的解决方案是创建相同的索引值:

datum_first_milestone.index = datum_second_milestone.index

如果需要仅按loc + column name过滤列,则应简化解决方案:

datum_first_milestone = data_audit.loc[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase1), 'GeplantesErledigungsdatum']
datum_second_milestone = data_audit.loc[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase2), 'GeplantesErledigungsdatum']

print(datum_first_milestone)
print(datum_second_milestone)

如果总是返回一个值Series.item返回标量:

print (datum_first_milestone.item() - datum_second_milestone.item())

如果有一个或多个值可以选择标量的第一个值,则更为通用:

print (datum_first_milestone.iat[0] - datum_second_milestone.iat[0])