【问题标题】:converting "H:M:S" string in pandas to datetime object将 pandas 中的“H:M:S”字符串转换为日期时间对象
【发布时间】:2021-04-17 18:25:14
【问题描述】:
import pandas as pd
import datetime
dictt={'s_time': ["06:30:00", "07:30:00","16:30:00"], 'f_time': ["10:30:00", "23:30:00","23:30:00"]}
df=pd.DataFrame(dictt)

在这种情况下,我想将它们转换为日期时间对象,以便以后可以将其用于计算或其他用途。 当我命令df['s_time']=pd.to_datetime(df['s_time'],format='%H:%M:%S').dt.time 它给出了错误:

时间数据“24:00:00”与格式“%H:%M:%S”不匹配(匹配)

所以我不知道如何解决这个问题

【问题讨论】:

标签: python pandas datetime


【解决方案1】:

“24:00:00”表示“00:00:00”

如果只是“24:00:00”引起了麻烦,您可以将“24:”前缀替换为“00:”:

import pandas as pd

df = pd.DataFrame({'time': ["06:30:24", "07:24:00", "24:00:00"]})
# replace prefix "24:" with "00:"
df['time'] = df['time'].str.replace('^24:', '00:', regex=True)
# now to_datetime
df['time'] = pd.to_datetime(df['time'])

df['time']
0   2021-04-17 06:30:24
1   2021-04-17 07:24:00
2   2021-04-17 00:00:00
Name: time, dtype: datetime64[ns]

1 到 24 小时制(而不是 0 到 23)

但是,如果您的时间表示法从 1 到 24 小时(而不是 0 到 23),您可以将字符串解析为 timedelta,减去一小时,然后转换为 datetime:

df = pd.DataFrame({'time': ["06:30:24", "07:24:00", "24:00:00"]})
# to timedelta and subtract one hour
df['time'] = pd.to_timedelta(df['time']) - pd.Timedelta(hours=1)
# to string and then datettime:
df['time'] = pd.to_datetime(df['time'].astype(str).str.split(' ').str[-1])

df['time']
0   2021-04-17 05:30:24
1   2021-04-17 06:24:00
2   2021-04-17 23:00:00
Name: time, dtype: datetime64[ns]

注意:这里的基本假设是日期无关紧要。如果还有日期,请参阅我在 cmets 部分中链接的相关问题。

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2023-04-09
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多