如何将输入指定为日期时间?

时间:2018-02-20 03:34:08

标签: python pandas datetime

我的项目涉及阅读隐藏城市数据的CSV文件,然后计算各种统计数据。我正在尝试创建一个函数,该函数将从CSV中获取城市数据并创建数据副本,但应用了日期过滤器。提示用户输入开始和结束日期。

我目前正在测试并尝试使用正确的日期过滤器来打印数据。到目前为止,我最大的问题是我似乎无法将用户输入的字符串转换为日期时间格式。有没有办法让用户以日期时间格式直接输入数据?

def date_filtering(city_file):
    date1 = input('Please enter a valid start date that you wish to explore?\n'
    date2 = input('Please enter a valid end date.')    
    print(city_file.loc[date1:date2])

提前致谢!

1 个答案:

答案 0 :(得分:1)

我正在假设你只需要约会,因为你没有在代码中提及时间。你需要做的是以某种方式解析输入以获得年,月和日。我相信它可以使用正则表达式来完成,但只需使用python内置函数就可以更简单。

在美国代表日期的正常方式是mm / dd / yyyy,所以我会用它。

def strtodatetime(str):
     month, day, year = [int(d) for d in str.split("/")]
     return datetime.date(year, month, day)

date1 = strtodatetime(input('Please enter a valid start date that you wish to explore?\n'))
date2 = strtodatetime(input('Please enter a valid end date.'))

strtodatetime将输入字符串拆分为“/”字符,然后将结果列表中的每个元素转换为整数。然后它返回一个具有相应日期的新datetime.date对象。

如果您担心用户输入错误格式的内容,您可以使用try块来确保它们不会。我可以看到三种可能的异常来源,用户可以输入太多或太少/(如10/2/1999/2),用户可以输入不存在的日期(如13/32) / -1),或者用户可以输入无法转换为int的内容(如March / 22/1999)。这三个都提升了ValueErrors,因此这是我们需要捕获的唯一例外。要抓住这个,我们会将代码更改为

def strtodatetime(str):
     month, day, year = [int(d) for d in str.split("/")]
     return datetime.date(year, month, day)

date_filtering(city_file):
    try:
        date1 = strtodatetime(input('Please enter a valid start date that you wish to explore?\n'))
        date2 = strtodatetime(input('Please enter a valid end date.'))
    except ValueError:
        print('Please enter a valid date in the format mm/dd/yyyy')
        return date_filtering(city_file)
    return city_file.loc[date1:date2]

print(data_filtering(city_file))