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

如何将Pandas数据框中的数值转换为百万/千位字符串格式?

解决Pandas中数值转百万/千格式的问题

问题场景

现有如下Pandas数据框:

import pandas as pd
df = pd.DataFrame([[3000000, 2500000, 1800000, 800000, 500000]], columns=['Market value'])

需要将Market value列的数值转换为带欧元符号、百万(M)/千(K)的格式,期望转换结果如下:

  • 3000000 -> €3M
  • 2500000 -> €2.5M
  • 1800000 -> €1.8M
  • 800000 -> €800K
  • 500000 -> €500K

尝试的代码及问题

尝试了以下代码:

import numpy as np
df['Market Value'] = np.select(condlist = [(df['Market value']/1000) >= 1000],
                               choicelist = ['€'+(df['Market value'].astype(float)/1000000).astype(int).astype(str) + 'M'],
                               default = '€'+(df['Market value'].astype(float)/1000).astype(int).astype(str) + 'K')

但输出不符合预期:

  • 2500000 输出为€2M(期望€2.5M)
  • 1800000 输出为€1M(期望€1.8M)
    问题根源是代码中使用.astype(int)直接截断了小数部分,丢失了精度。

解决方案

方法1:自定义函数+apply

通过自定义格式化函数,保留必要的小数位,并处理整数情况:

def format_value(val):
    if val >= 1000000:
        # 格式化为1位小数,去掉末尾的.0
        return f"€{val/1000000:.1f}M".replace(".0", "")
    else:
        return f"€{val/1000:.0f}K"

df['Market Value'] = df['Market value'].apply(format_value)

方法2:改进np.select实现

用格式化字符串替代类型转换,避免丢失小数:

import numpy as np

df['Market Value'] = np.select(
    condlist=[df['Market value'] >= 1000000],
    choicelist=[df['Market value'].apply(lambda x: f"€{x/1000000:.1f}M".replace(".0", ""))],
    default=df['Market value'].apply(lambda x: f"€{x/1000:.0f}K")
)

两种方法都能得到符合预期的结果:

Market valueMarket Value
3000000€3M
2500000€2.5M
1800000€1.8M
800000€800K
500000€500K

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:24:29