[英]Python Pandas: differences between two dates in weeks?
当试图在几周内找到两个日期之间的差异时:
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')
这显然是错误的。 问题:
如何获得以周为单位的差异,而不是纳秒,四舍五入为整数值?
如何从“numpy.timedelta64”对象中获取价值?
我认为您可以通过除以 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
参见变频。
您也可以使用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
这是一个简单的修复:
def diff(start, end):
x = millis(end) - millis(start)
return np.ceil(x.astype(int) / (7*86400*1e9))
主要是在操作之前删除单位(纳秒)。
PS:当函数未返回毫秒时,请考虑不要调用您的函数millis()
。
jezrael 的回答给我带来了一个错误,所以这是一个替代解决方案(以防您在尝试时也遇到错误)
import numpy as np
import pandas as pd
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.