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

Pandas低精度整数列计算int64结果的溢出问题及内存友好实现问询

解决方案

1. 用pandas.eval()实现无副本的64位计算

你可以在eval()的表达式中直接对列调用astype()进行即时类型转换,这种转换是计算过程中逐元素完成的,不会创建完整的int64列副本,完美适配内存受限场景。

针对你的需求newCol64 = srcCol8 * srcCol16 * srcCol16,可以这样写:

df.eval('newCol64 = srcCol8.astype("int64") * srcCol16.astype("int64") * srcCol16.astype("int64")', inplace=False)
  • 如果需要直接修改原DataFrame,把inplace设为True即可。
  • 底层依赖numexpr引擎优化计算,会自动分块处理大数据集,避免一次性占用过多内存。

2. 关于pandas.eval()的即时类型转换支持

答案是支持。在eval()的表达式语法中,允许直接调用Series的astype()方法,对列进行按需类型转换。这种转换不会生成独立的int64列副本,而是在计算流程中即时完成类型提升,计算后直接输出int64结果列,完全符合你的内存控制要求。

补充:避免其他方法的内存浪费

不要直接使用srcCol8.astype('int64') * srcCol16 * srcCol16这类普通链式计算——astype()会返回完整的int64 Series副本,80M行的情况下会瞬间占用大量额外内存,违背内存受限的前提。而eval()的表达式计算不会产生这类中间副本,是最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:05:13