You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正DataFrame时间转换错误?将20220718.20154转为2022-07-18 20:15:40

问题分析与解决

你遇到的问题核心在于两点:

  1. 浮点数转字符串时的精度丢失:原始数据是浮点数类型(如20220718.20154),直接用astype(str)转换可能因浮点数精度问题,得到带冗余小数位的字符串(比如20220718.201539999),导致解析格式不匹配。
  2. 格式字符串不匹配:你的原始时间部分是5位(HHMMs,即小时2位、分钟2位、秒1位),但你用了要求6位秒数的%H%M%S格式,解析时出现匹配错误,导致秒数被错误解析。

解决方案

方案1:字符串格式化处理

通过格式化确保浮点数转字符串的精度,再补全秒数的缺失位:

import pandas as pd

df = pd.read_excel(filepath)
# 将浮点数格式化为固定的"YYYYMMDD.HHMMs"字符串(小数部分保留5位)
df['date_str'] = df['date'].apply(lambda x: f"{x:.5f}")
# 去掉小数点,末尾补0将秒数从1位转为2位,得到"YYYYMMDDHHMMSS"格式
df['date_str'] = df['date_str'].str.replace('.', '') + '0'
# 解析为标准datetime格式
df['date'] = pd.to_datetime(df['date_str'], format='%Y%m%d%H%M%S')
print(df['date'])

方案2:拆分日期与时间部分处理

拆分整数(日期)和小数(时间)部分分别处理,避免浮点数精度问题:

import pandas as pd

df = pd.read_excel(filepath)
# 提取整数部分作为日期,转为8位字符串
date_part = df['date'].astype(int).astype(str)
# 提取小数部分转为5位时间字符串,补0后得到6位HHMMSS格式
time_part = (df['date'] - df['date'].astype(int)) \
            .mul(100000).astype(int).astype(str).str.zfill(5) + '0'
# 拼接后解析为datetime
df['date'] = pd.to_datetime(date_part + time_part, format='%Y%m%d%H%M%S')
print(df['date'])

两种方案都能将20220718.20154正确转换为2022-07-18 20:15:40格式。

内容的提问来源于stack exchange,提问作者Jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:57:18