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

如何将Pandas列中数值转为保留两位小数的字符串并保留NaN?

解决方案

核心思路

先将目标列转为数值类型,再对非空值做四舍五入保留两位小数的格式化,同时保留原有的NaN值。

代码实现

注意你代码里写的PAYMENT和数据里的列名AMOUNT不一致,请替换为实际列名:

import pandas as pd

# 1. 将object类型列转为数值类型,保留原有NaN
df['AMOUNT'] = pd.to_numeric(df['AMOUNT'], errors='coerce')

# 2. 对非NaN值格式化保留两位小数,NaN保持不变
df['AMOUNT'] = df['AMOUNT'].apply(lambda x: f"{x:.2f}" if pd.notnull(x) else x)

如果追求更高效的批量处理,也可以用numpy.where写法:

import pandas as pd
import numpy as np

df['AMOUNT'] = pd.to_numeric(df['AMOUNT'], errors='coerce')
df['AMOUNT'] = np.where(df['AMOUNT'].notna(), df['AMOUNT'].round(2).astype(str), df['AMOUNT'])

效果说明

  • 原数据中的73.345000会处理为"73.35",35.720833处理为"35.72",35.505000处理为"35.51",完全匹配你的需求;
  • 原有的NaN值会被保留,不会被替换为0或其他值;
  • 处理后列类型仍为object,所有非空值均为两位小数的字符串格式。

原有代码问题说明

你之前的代码仅完成了数值转字符串的操作,但缺少小数位数格式化逻辑;且fillna(0)属于多余步骤(虽然最后用mask还原了NaN,但增加了不必要的计算),去掉该步骤并添加小数格式化逻辑即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:15:46