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

Python pandas中含NaN的Object类型列如何转换为Int类型

问题原因

报错ValueError: could not convert string to float: 的核心原因是参与运算的D104、D106等哑变量列中存在空字符串、首尾带不可见空格的脏数据,并非纯数值内容,直接调用类型转换方法会触发报错。
列类型为object时,+运算符默认执行字符串拼接,因此直接用eval计算会得到0000、0100这类拼接结果,而非数值求和。
另外你之前写的data_final['D104'].fillna()属于语法错误,fillna()必须传入指定的填充值,否则不会生效。

解决步骤
  1. 批量清洗+转换所有哑变量列的类型
    先统一处理列内的脏数据,再转为数值类型:
import pandas as pd

# 指定需要参与求和的哑变量列
calc_cols = ['D104', 'D106', 'D107', 'D108']

for col in calc_cols:
    # 去除每个值首尾的空白字符,把空字符串统一替换为缺失值
    data_final[col] = data_final[col].astype(str).str.strip().replace('', pd.NA)
    # 强制转换为数值,无法解析的内容设为缺失值,最终转为可空整数类型
    data_final[col] = pd.to_numeric(data_final[col], errors='coerce').astype('Int64')

# 哑变量的缺失值通常填充0,可根据自身业务逻辑调整填充值
data_final[calc_cols] = data_final[calc_cols].fillna(0)
  1. 执行按行求和
    类型转换完成后,优先用sum做按行计算,比eval容错性更高:
data_final['violencia'] = data_final[calc_cols].sum(axis=1)

如果要继续用eval也可以,此时列均为数值类型,不会再出现字符串拼接问题:

data_final.eval('violencia = D104 + D106 + D107 + D108', inplace=True)
结果验证

转换完成后调用value_counts(),会输出0-4的数值计数结果,不会再出现字符串格式的拼接值:

data_final['violencia'].value_counts().sort_index()

内容的提问来源于stack exchange,提问作者Sandra Mireli Martnez Gutirrez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:09:57