【问题标题】:How to convert a String to Time in python?如何在python中将字符串转换为时间?
【发布时间】:2021-07-12 06:10:53
【问题描述】:

当我尝试将字符串转换为时间时,它不适用于以下代码,我不明白为什么有人可以帮助我?

pd.to_datetime(movie_df['duration'], format='%M min')

我收到此错误:

ValueError: 时间数据 '93 min' 与格式 '%M min' 不匹配(匹配)

【问题讨论】:

    标签: python pandas dataframe datetime time


    【解决方案1】:

    您可以先将duration 中的min 删除,然后将其转换为pandas.TimedeltaIndex

    movie_df['duration'] = movie_df['duration'].str.split(' ').str[0].astype(int)
    
    movie_df['duration'] = pd.TimedeltaIndex(movie_df['duration'], unit='m').to_pytimedelta().astype(str)
    
    print(movie_df)
    
      duration
    0  1:33:00
    1  1:42:00
    

    感谢MrFuppes的建议,您可以使用pandas.to_timedelta()

    movie_df['duration'] = movie_df['duration'].str.split(' ').str[0].astype(int)
    movie_df['duration'] = pd.to_timedelta(movie_df['duration'], unit='m').astype(str)
    
    # print(movie_df)
    
              duration
    0  0 days 01:33:00
    1  0 days 01:42:00
    

    【讨论】:

    • 为什么不简单地用pd.to_timedelta解析?
    • @MrFuppes 刚刚编辑。感谢您的建议。
    • 非常感谢!
    【解决方案2】:

    %M 指的是一小时的“分钟”。 (介于 0 到 60(不含)之间)。

    此外,“X min”是当强制转换为datetime 对象时很可能会失去其语义。

    >>> datetime.strptime('45 min', "%M min")
    datetime.datetime(1900, 1, 1, 0, 45)
    

    在上面的示例中,即使转换确实有效,也很可能不是您想要的(1900 年 1 月 1 日 00:45)。

    看起来您更多地处理持续时间,不应该使用to_datetime 函数。 查看time-deltas,(顺便提一下@MrFuppens 也指出,to_timedelta 函数)

    【讨论】:

    • 感谢您的帮助!
    【解决方案3】:

    【讨论】:

    • 不鼓励仅链接答案,因为链接可能会随着时间的推移而中断并使答案变得无用。请在此处提供解决方案的摘要,以及为什么您的答案可能比已经提供的其他答案更可取。
    【解决方案4】:

    您收到此错误是因为该函数不知道如何转换 93 min ,因为 min 应该

    df['duration'].apply(lambda x: str(int(x.split()[0])//60) +":"+ str(int(x.split()[0])%60)) 
    pd.to_datetime(movie_df['duration'], format='%H:%M')
    

    【讨论】:

    • 非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2020-01-02
    • 2011-09-18
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多