【问题标题】:Find date name in datetime column with user input as weekday name as a 'String'在日期时间列中查找日期名称,用户输入为工作日名称作为“字符串”
【发布时间】:2018-04-12 13:27:39
【问题描述】:

我有一个名为“开始时间”的日期时间列

我正在尝试根据用户输入查找具有特定工作日名称的条目。

用户输入是一个字符串,可以是 周日,周一,...周六。因此,如果输入星期日,我想查找所有以星期日为日期的条目,无论月份或年份如何。

这是我的代码:

user_day = input('Input the name of the day.user_day.')

print(df[df['Start Time'].dt.weekday == dt.datetime.strptime(user_day, '%A')])

输出是: 空数据框 列:[未命名:0、开始时间、结束时间、行程持续时间、开始站、结束站、用户类型] 索引:[]

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用相同格式的weekday_namestrftime

    print(df[df['Start Time'].dt.weekday_name == user_day])
    

    或者:

    print(df[df['Start Time'].dt.strftime('%A') == user_day])
    

    验证

    df = pd.DataFrame({'Start Time':pd.date_range('2015-01-01 15:02:45', periods=10)})
    print (df)
               Start Time
    0 2015-01-01 15:02:45
    1 2015-01-02 15:02:45
    2 2015-01-03 15:02:45
    3 2015-01-04 15:02:45
    4 2015-01-05 15:02:45
    5 2015-01-06 15:02:45
    6 2015-01-07 15:02:45
    7 2015-01-08 15:02:45
    8 2015-01-09 15:02:45
    9 2015-01-10 15:02:45
    
    user_day = 'Monday'
    print(df[df['Start Time'].dt.weekday_name == user_day])
               Start Time
    4 2015-01-05 15:02:45
    

    print (df['Start Time'].dt.weekday_name)
    0     Thursday
    1       Friday
    2     Saturday
    3       Sunday
    4       Monday
    5      Tuesday
    6    Wednesday
    7     Thursday
    8       Friday
    9     Saturday
    Name: Start Time, dtype: object
    
    print (df['Start Time'].dt.strftime('%A'))
    0     Thursday
    1       Friday
    2     Saturday
    3       Sunday
    4       Monday
    5      Tuesday
    6    Wednesday
    7     Thursday
    8       Friday
    9     Saturday
    Name: Start Time, dtype: object
    

    【讨论】:

    • 我尝试了这两种解决方案,它返回一个空输出,与我之前收到的一样。
    • @sadAndClueless72 - 我认为 dt.datetime.strptime(user_day, '%A') 如果比较日期名称是不必要的。检查编辑的答案。
    • 我与您建议的日期名称进行了比较, print(df[df['Start Time'].dt.weekday_name == user_day]) 并且有效!谢谢!!!
    【解决方案2】:
    • pandas.Series.dt.weekday: 星期一=0 的星期几, 星期日=6
    • pandas.Series.dt.weekday_name: 一周中的一天的名称(例如:星期五)

    注意用户输入。您正在加载一个string,您不需要使用strptime 将这样的字符串转换为datetime

    您只需将 DF 中的 datetimelikeweekday_name 与用户输入相匹配。这是一个字符串匹配。

    print(df[df['Start Time'].dt.weekday_name == user_day])
    

    【讨论】:

    • 我得到:ValueError:时间数据“星期日”与格式“%w”不匹配
    • 啊啊啊好吧,这是由于用户输入。当然,这是一个字符串。刚刚编辑了我的答案。
    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2018-11-27
    相关资源
    最近更新 更多