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

pandas混合类型列中存储为文本的数字转换为数值的更优方法

优化方案

你原有的实现逻辑完全通顺,最大的可优化点是不需要用apply包装pd.to_numeric,这个函数原生支持直接传入Series对象,直接调用即可获得更好的性能,尤其数据规模扩大后优势会更明显。
优化后代码如下:

raw["Matl Group"] = (
    pd.to_numeric(raw["Matl Group"], errors="coerce")
    .fillna(raw["Matl Group"])
)

性能对比参考

  • 20万行级别测试下,优化后的向量化写法比原apply写法快5~10倍
  • 百万行级别下性能差距会拉到20倍以上,完全能支撑后续数据规模增长的需求

补充说明

  • 转换完成后该列的dtype为object是正常现象,因为列内同时存在数值和字符串两种类型,pandas的数值类型列无法混存非数值内容,该状态不影响pd.merge()的匹配逻辑
  • 若需要校验转换效果,可运行如下代码统计各类型的占比,排查异常数据:
# 统计列内各数据类型的数量
raw["Matl Group"].apply(type).value_counts()
  • 若存在物料组字母大小写不一致的情况(比如同时存在8120m和8120M),可在转换前加一步统一大小写,避免匹配失败:
# 先统一为大写再做转换
raw["Matl Group"] = (
    pd.to_numeric(raw["Matl Group"].str.upper(), errors="coerce")
    .fillna(raw["Matl Group"].str.upper())
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:02