使用pd.to_datetime转换含24:00的时间序列遇hour报错的解决方法
解决pd.to_datetime处理24:00时间格式报错的问题
报错原因是Python标准datetime格式不允许小时取值为24,而2017/01/01 24:00:00本质等价于2017/01/02 00:00:00,以下是几种可行的解决方法:
方法一:手动替换+日期偏移
先将字符串中的24:00:00替换为00:00:00,再给对应行的日期加1天:
import pandas as pd # 模拟你的数据 df = pd.DataFrame({ 'DateTime': [ '2017/ 01/01 01:00:00', '2017/ 01/01 02:00:00', '2017/ 01/01 23:00:00', '2017/ 01/01 24:00:00' ] }) # 标记包含24:00的行 mask = df['DateTime'].str.contains('24:00:00') # 替换24:00为00:00 df['DateTime'] = df['DateTime'].str.replace('24:00:00', '00:00:00') # 转换为datetime类型 df['DateTime'] = pd.to_datetime(df['DateTime']) # 给标记行加1天 df.loc[mask, 'DateTime'] += pd.Timedelta(days=1)
方法二:使用dateutil自动解析
dateutil库的解析器支持自动识别24:00格式并转换为次日0点,需要先安装依赖(如果未安装):
pip install python-dateutil
然后执行代码:
from dateutil.parser import parse import pandas as pd df['DateTime'] = df['DateTime'].apply(parse)
额外说明
如果你的时间字符串存在多个连续空格(比如示例中的2017/ 01/01 24:00:00有两个空格),可以先统一清理空格,避免解析异常:
df['DateTime'] = df['DateTime'].str.replace('\s+', ' ', regex=True)
内容的提问来源于stack exchange,提问作者user369273
相关产品推荐
相关产品推荐

