Pandas读取CSV时epoch格式时间转datetime出现OverflowError如何解决
错误原因
OverflowError: Python int too large to convert to C long报错通常出现在32位Python环境、或是1.0以下版本的pandas中:19位纳秒精度的Epoch时间戳数值超出了C long类型的取值范围,因此触发溢出异常。
可行修复方案
- 方案1(兼容性最高,优先推荐)
将纳秒级时间戳缩放为秒级后再转换,避免大整数运算溢出,会自动保留小数部分对应的微秒、纳秒精度,无时间偏差:
df['time'] = pd.to_datetime(df['time'] / 10**9, unit='s')
- 方案2(仅适配64位Python环境)
先将time列强制转换为int64类型,再执行纳秒级转换:
df['time'] = df['time'].astype('int64') df['time'] = pd.to_datetime(df['time'], unit='ns')
- 方案3(适合小数据集场景)
调用Python原生datetime模块逐行处理:
from datetime import datetime df['time'] = df['time'].apply(lambda x: datetime.fromtimestamp(x / 1e9))
最优实现说明
针对大规模数据集优先选择方案1:属于pandas向量化操作,运行效率远高于逐行apply的方案,同时兼容32/64位环境和全版本pandas,无额外适配成本。
如需指定时区,可在pd.to_datetime方法中增加tz参数,示例:
# 转换为东八区时间 df['time'] = pd.to_datetime(df['time'] / 1e9, unit='s', tz='Asia/Shanghai')
内容的提问来源于stack exchange,提问作者Yasi
相关产品推荐
相关产品推荐

