Python Pandas:几周内两个日期之间的差异?

时间:2016-12-24 09:24:49

标签: python pandas

尝试在几周内找出两个日期之间的差异时:

import pandas as pd

def diff(start, end):
    x = millis(end) - millis(start)
    return x / (1000 * 60 * 60 * 24 * 7 * 1000)

def millis(s):
    return pd.to_datetime(s).to_datetime64()

diff("2013-06-10","2013-06-16")

结果我得到了:

Out[15]: numpy.timedelta64(857,'ns')

这显然是错误的。问题:

  1. 如何在几周内获得差异,而不是纳秒,将其四舍五入到整个值?

  2. 如何从'numpy.timedelta64'对象中获取价值?

4 个答案:

答案 0 :(得分:6)

我认为你可以通过除以numpy标量转换为int

def diff(start, end):
    x = pd.to_datetime(end) - pd.to_datetime(start)
    return int(x / np.timedelta64(1, 'W'))

print (diff("2013-06-10","2013-06-16"))
0
print (diff("2013-06-10","2013-06-26"))
2

请参阅transform-strict-mode

答案 1 :(得分:0)

这是一个简单的解决方法:

def diff(start, end):
    x = millis(end) - millis(start)
    return np.ceil(x.astype(int) / (7*86400*1e9))

主要是在操作前删除单位(纳秒)。

P.S。:当它没有返回毫秒时,考虑不调用你的函数millis()

答案 2 :(得分:0)

jezrael的回答为我带来了一个错误,因此这是一个替代解决方案(以防您在尝试时也遇到错误)

def diff(start, end):
    x = pd.to_datetime(end) - pd.to_datetime(start)
    return (x).apply(lambda x: x/np.timedelta64(1,'W')).astype(int)

答案 3 :(得分:0)

您也可以使用pandas.Timedelta

import pandas as pd

def diff(start, end):
    days = pd.to_datetime(end) - pd.to_datetime(start)
    week = int(pd.Timedelta(days).days / 7)
    remainder = pd.Timedelta(days).days % 7
    return str(week) + ' weeks and ' + str(remainder) + ' days'

print(diff("2019-06-10","2019-07-11"))

Output:
4 weeks and 3 days