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

如何高效将Pandas列转换为Decimal128以导入MongoDB

高效将浮点值转换为Decimal128导入MongoDB的优化方案

核心优化思路

你当前代码慢的根源是用apply(axis=1)逐行遍历处理——这是pandas里效率最低的操作之一。换成列级批量操作+提前统一处理逗号替换,能大幅提升处理速度。

具体优化实现

from bson import Decimal128
import pandas as pd

def convert_to_decimal(x):
    try:
        if pd.notna(x):
            # 直接传入处理后的字符串转Decimal128
            return Decimal128(str(x))
        return None
    except Exception as e:
        print(f"转换失败,对应值:{x}")
        raise e

dec_cols = ['col1', 'col2','col3']

# 第一步:批量替换所有目标列的逗号,一次性完成比逐行处理快N倍
snap_df[dec_cols] = snap_df[dec_cols].replace(',', '', regex=True)

# 第二步:逐列应用转换函数,避免逐行遍历的开销
for col in dec_cols:
    snap_df[col] = snap_df[col].apply(convert_to_decimal)

额外提速建议

  • 如果你的数据原本是纯数值类型(没有带逗号的字符串格式),可以直接跳过逗号替换步骤。
  • 若数据量达到千万级以上,可改用dask.dataframe分块处理,既能避免内存溢出,又能利用多线程提升处理效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:50:17