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

Python DataFrame含M+后缀混合值转百万级数值修改不生效如何解决

问题根因
  • 遍历df.a时获取的循环变量i是列元素的临时副本,对i的修改不会回写到原DataFrame中,这是你修改不生效的核心原因。
  • 直接循环遍历DataFrame元素的写法性能远低于Pandas自带的向量化操作,不推荐使用。
解决方法

可以用apply或者向量化字符串操作实现需求,两种实现方式如下:

方法1:自定义函数+apply(易读性高)

import pandas as pd
import numpy as np

def convert_a_col(s):
    s = s.strip()
    if s.endswith("M+"):
        # 提取M+前的数值,乘以100万后转整数
        return int(float(s.removesuffix("M+")) * 1000000)
    else:
        # 去掉逗号后转整数
        return int(s.replace(",", ""))

# 将转换后的结果直接赋值回原a列
df["a"] = df["a"].apply(convert_a_col)

如果需要转换后保留3,500,000这种带千位分隔符的字符串格式,再追加一行代码即可:

df["a"] = df["a"].apply(lambda x: f"{x:,}")

方法2:向量化操作(性能更高,适合大数据量场景)

# 筛选出带M+后缀的行
m_mask = df["a"].str.endswith("M+")
# 批量处理M+后缀的数值
df.loc[m_mask, "a"] = (df.loc[m_mask, "a"].str[:-2].astype(float) * 1000000).astype(int)
# 批量处理剩余带逗号的数值
df.loc[~m_mask, "a"] = df.loc[~m_mask, "a"].str.replace(",", "").astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:03