Pandas中object类型列转float异常求助:值变0或丢失小数位
问题解决:Pandas Object类型列转Float时丢失精度/数值异常
问题场景
将DataFrame中price和qty两列(Object类型)转换为Float类型以进行数值计算时,使用.astype(float)出现异常:
price列全部显示为0qty列丢失小数部分
原数据:
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_
相关产品推荐
相关产品推荐

