[英]How to check if two dates falls between two columns of dataframe representing start date and end date
[英]How to check the date in between the tuple, dates as start and end
我有一个 function ,它在其中创建了一个字典,如下所示。
x = {'filename': {'filetype': ('5/6/2019', '12/31/2019')}, 'filename2': {'filetype': ('3/24/2018', '5/6/2019')}}
我需要通过传递日期及其类型来创建一个新的 function 以根据元组日期返回文件名。
def fn(date, filetype):
I'm trying to pass a date as a first argument
and the date should check if it is in between the tuple as start and end dates
in the dictionary values above If it is in between those dates I need to return the file name
return filename
问题:
是否可以检查元组的中间日期?
您应该转换为日期时间对象:
from datetime import datetime
x = {'filename': {'filetype': ('5/6/2019', '12/31/2019')}, 'filename2': {'filetype': ('3/24/2018', '5/6/2019')}}
def fn(dateobj, filetype):
dateobj = datetime.strptime(dateobj, '%m/%d/%Y')
startdate = datetime.strptime(filetype[0], '%m/%d/%Y')
enddate = datetime.strptime(filetype[1], '%m/%d/%Y')
return startdate <= dateobj <= enddate
print(fn('6/6/2019', x['filename']['filetype']))
print(fn('4/6/2019', x['filename']['filetype']))
这将打印:
True
False
正如人们在评论中提到的,建议将字符串日期转换为日期时间对象。 一种方法是:
from datetime import datetime
new_date = datetime.strptime('12/31/2019', '%m/%d/%Y')
假设所有日期字符串都是日期时间对象,您的 function 变为:
def fn(date, filetype):
for filename, range in x.items():
if filetype in range:
start, end = range[filetype]
if start <= date <= end:
return filename
如果日期在范围之间,这将返回文件名,否则返回 None
使用split
按以下顺序将日期转换为 3 个数值:年、月、日。 然后您可以将日期作为元组进行比较。
def convert(datestr):
m, d, y = datestr.split('/')
return (int(y), int(m), int(d))
date1 = convert('12/31/2018')
date2 = convert('1/1/2019')
print(date1 < date2)
相同的方法适用于列表,但是这两种类型不能混合使用,比较中的所有日期都是元组,或者所有日期都是列表。
对于日期间隔,只需测试(例如在if
语句中):
begin <= date <= end
其中所有 3 个值都如上所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.