【发布时间】: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
当我尝试将字符串转换为时间时,它不适用于以下代码,我不明白为什么有人可以帮助我?
pd.to_datetime(movie_df['duration'], format='%M min')
我收到此错误:
ValueError: 时间数据 '93 min' 与格式 '%M min' 不匹配(匹配)
【问题讨论】:
标签: python pandas dataframe datetime time
您可以先将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解析?
%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 函数)
【讨论】:
【讨论】:
您收到此错误是因为该函数不知道如何转换 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')
【讨论】: