如何高效将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
相关产品推荐
相关产品推荐

