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

Python 如何将输入指定为日期时间?,python,pandas,datetime,Python,Pandas,Datetime,我的项目包括读取有关城市数据的CSV文件,然后计算各种统计数据。我正在尝试创建一个函数,该函数将从CSV获取城市数据,并创建数据的副本,除非应用了日期过滤器。系统将提示用户输入开始和结束日期 我目前正在测试并尝试使用正确的日期过滤器打印数据。到目前为止,我最大的问题是,我似乎无法将用户输入的字符串转换为日期时间格式。用户是否有办法直接以日期时间格式输入数据 def date_filtering(city_file): date1 = input('Please enter a valid

我的项目包括读取有关城市数据的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])

提前谢谢

我假设您只需要日期,因为代码中没有提到时间。您需要做的是以某种方式解析输入以获得年、月和日。我确信它可以使用正则表达式来完成,但只使用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的内容(如1999年3月22日)。所有这三个都会引发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))

只有最后两行代码与您的问题相关。请给出最简单的工作示例:您需要日期和时间还是只需要日期?@DyZ该代码示例非常合理。您不需要绝对最小的示例,只要足够简短,就不难理解。@SamCraig此代码示例不合理。大量不相关的注释和函数定义分散了我对实际问题的注意力。好吧,问题是您甚至不需要将字符串转换为datetime,因为pandas足够聪明,可以推断数据类型。但是,这取决于您没有提供的数据。您应该在函数中添加一个
try
语句,或者在第3和第6位添加一个
if
语句测试是否有“/”。除此之外,,good@KGSHbteamMineTeamBeastO_对“/”位置的测试会有很多误报/漏报(例如,它会对1/1/2000产生一个错误,这是有效的,而对13/33/-001或ab/cd/efgh则不会,这是无效的)。我编辑了我的评论,以包括异常处理,这应该会很好。我使用了字符串到日期时间函数,但在尝试将日期应用到CSV文件时仍然出现以下错误,但仍然出现以下错误。TypeError:“@KevinNgo这听起来像是和其他东西的问题,因为您并没有比较上面代码中的任何日期。您可以编写与此相关的不同问题的代码,并将其链接到此处,我将尽力提供帮助。1)您应该使用MM/DD/YYYY,您应该键入“02/03/2018”