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

DataFrame.round()方法失效,如何将指定列向下取整至3位小数?

解决Pandas中Object类型列无法执行小数取整的问题

嘿,问题的核心就在这儿——你所有的列都是object(字符串)类型!Pandas的round()方法只对数值类型(int或float)的列生效,直接调用它对字符串列完全不起作用,这就是你试了两次都没看到变化的原因。

咱们一步一步来搞定这个问题:

1. 先明确要处理的目标列

先把需要取整的列名整理出来,对应你的数据就是:

cols_to_round = ['Unnamed: 26', 'Unnamed: 27', 'Unnamed: 30', 'Unnamed: 31', 'Unnamed: 34']

2. 将字符串列转换为数值类型

首先得把这些看起来像数字的字符串转换成真正的浮点型,用pd.to_numeric()处理最稳妥:

# 如果你想直接修改原df1
df1[cols_to_round] = df1[cols_to_round].apply(pd.to_numeric, errors='coerce')

# 或者想生成新的df2,避免改动原数据
df2 = df1.copy()
df2[cols_to_round] = df2[cols_to_round].apply(pd.to_numeric, errors='coerce')

errors='coerce'是个保险选项,如果遇到无法转换的异常值会自动变成NaN,你的数据样例里都是合法数值,完全不用担心。

3. 执行小数取整操作

现在这些列已经是数值类型了,就可以正常用round(3)来取整到3位小数:

# 修改原df1的情况
df1[cols_to_round] = df1[cols_to_round].round(3)

# 生成df2的情况
df2[cols_to_round] = df2[cols_to_round].round(3)

可选:如果需要转回Object类型

要是你必须保持列的object类型结构,取整后可以再转回去:

df2[cols_to_round] = df2[cols_to_round].astype(str)

最后你可以用df2.info()验证一下,目标列应该已经变成float64类型(如果没转回字符串的话),查看数据也能看到已经是保留3位小数的数值了。

顺便解释下你之前尝试无效的原因:

  • df1.round(3):因为列是字符串,Pandas不会自动转换类型执行取整,所以毫无变化
  • 指定列列表创建新DataFrame:只是复制了原数据的列,没有做任何类型转换和取整操作,结果自然和原数据一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:17:34