如何将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
相关产品推荐
相关产品推荐

