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

Pandas中object类型列转float异常求助:值变0或丢失小数位

问题解决:Pandas Object类型列转Float时丢失精度/数值异常

问题场景

将DataFrame中price和qty两列(Object类型)转换为Float类型以进行数值计算时,使用.astype(float)出现异常:

  • price列全部显示为0
  • qty列丢失小数部分

原数据:

price               qty
0    0.00080000   157523.03870305
1    0.00080300    75173.00864078
2    0.00080450    67683.65347307
3    0.00082162    14939.84800485
4    0.00082300    47508.48349310
5    0.00085000    20000.00000000

price    object
qty      object

执行代码(存在变量名笔误):

df['price'] = df['price'].astype(float)
bid['qty'] = bid['qty'].astype(float)
print(df)
print(df.dtypes)

异常结果:

price     qty
0        0  157523
1        0   75173
2        0   67684
3        0   14940
4        0   47508
5        0   20000

price      float64
qty        float64

期望结果:保留原数据完整精度,列类型为float64。

解决步骤

1. 修正变量名笔误

原代码中bid['qty']应为df['qty'],否则无法修改目标DataFrame的列。

2. 使用pd.to_numeric替代astype(float)

astype(float)对字符串格式兼容性差,pd.to_numeric能自动处理字符串中的隐藏空格、格式问题,转换更健壮:

import pandas as pd

# 转换列类型,errors='coerce'将无效值转为NaN
df['price'] = pd.to_numeric(df['price'], errors='coerce')
df['qty'] = pd.to_numeric(df['qty'], errors='coerce')

3. 调整Pandas显示精度

转换后的数值实际是完整的,只是默认显示设置截断了小数或自动格式化,调整参数即可:

# 设置全局显示精度,保留8位小数
pd.set_option('display.float_format', lambda x: '%.8f' % x)
# 或设置全局精度
pd.set_option('precision', 8)

# 打印验证
print(df)
print(df.dtypes)

验证结果

执行上述代码后,将得到符合预期的完整精度数据,列类型为float64,可直接用于数值计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:45:57