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

pandas格式化含字符串与数字的列 数值保留1位小数

pandas混合类型列格式化保留小数方案

问题场景

存在一个同时包含数字和字符串的pandas DataFrame,结构示例如下:

Column1   Column2
name1     12.4
name2     13
name3     -
name4     0.2

需求为对Column2做格式化,让所有数字统一保留1位小数,当前Column2内所有元素均为字符串类型。

已尝试的方案与报错

  • 首次尝试使用pd.to_numeric将列值转换为数值类型:
    dfRW[dfRW.columns[1]] = pd.to_numeric(dfRW[dfRW.columns[1]])
    
    由于列中存在连字符-,该操作直接抛出报错。查询文档后得知添加errors='ignore'参数可避开报错执行,但后续格式化仍存在问题。
  • 后续尝试使用.format方法设置小数位数,代码如下:
    dfRW[dfRW.columns[1]] = pd.to_numeric(dfRW[dfRW.columns[1]], errors='ignore').map('${:,.2f}'.format)
    
    连字符-依然会导致执行出错。

预期输出

格式化后的目标结果如下:

Column1   Column2
name1     12.4
name2     13.0
name3     -
name4     0.2

补充信息

  • 已确认该列数据类型为dtype object,可用于排查AttributError: Can only use .str accessor with string values类报错
  • 已修正示例中混用逗号、点号作为小数分隔符的问题,所有数值均以点号作为小数分隔符。

解决方法

不要使用errors='ignore'参数:该参数的逻辑是只要列中存在任意无法转换的值,就直接返回原始列、完全不做转换,根本达不到批量转换合法数值的效果。
正确方案是使用errors='coerce'参数,将无法转换为数值的-转为空值,格式化时单独处理空值即可,不需要提前排序拆分数据行,pandas内置逻辑可直接完成处理,代码如下:

col = dfRW.columns[1]
# 第一步:转换列类型,合法值转浮点,非法的-转为空值NaN
dfRW[col] = pd.to_numeric(dfRW[col], errors='coerce')
# 第二步:逐值格式化,数值保留1位小数,空值替换回-
dfRW[col] = dfRW[col].apply(lambda x: f"{x:.1f}" if pd.notna(x) else "-")

注意点

你之前代码里的格式化模板'${:,.2f}'.format是带美元符号、保留2位小数、自动添加千分位逗号的格式,和当前需求(保留1位小数、无额外符号)不匹配,使用时需要注意调整模板内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:27:46