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

Pandas中使用df.fillna()填充DataFrame空值后数据类型全部变为object的高效解决方法咨询

问题根源&快速解决办法

嘿,这个问题我之前也碰到过!核心原因是你在填充数值型列的时候犯了一个小语法错误:你写的是df['umur'].fillna(df['umur'].mean, inplace=True),这里的mean是方法对象本身,而不是调用方法计算出来的均值数值。当你用函数对象去填充原本是float64类型的列时,Pandas会把整个列的 dtype 强制转为object,因为列里同时存在数值和函数两种不同类型的数据了。

第一步:修正数值列的填充代码

只需要把mean改成mean()(调用方法获取实际的均值)就行:

# 数值型特征填充(修正后)
df['umur'].fillna(df['umur'].mean(), inplace=True)
df['gaji'].fillna(df['gaji'].mean(), inplace=True)
df['berat'].fillna(df['berat'].mean(), inplace=True)
df['tinggi'].fillna(df['tinggi'].mean(), inplace=True)
df['stress'].fillna(df['stress'].mean(), inplace=True)

这样改完后,数值型列会保持原来的float64类型,不会变成object。

更高效的批量处理方式

如果不想逐个列写填充代码,可以用select_dtypes批量筛选不同类型的列,统一处理,既简洁又不容易出错:

# 批量填充分类型特征:用众数填充
categorical_cols = df.select_dtypes(include=['object']).columns
df[categorical_cols] = df[categorical_cols].fillna(df[categorical_cols].mode().iloc[0])

# 批量填充数值型特征:用均值填充
numeric_cols = df.select_dtypes(include=['float64']).columns
df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].mean())

这种方法会自动识别列的类型,用对应逻辑填充,同时严格保留原有列的数据类型,不用手动一个个指定列名。

验证结果

处理完后,你可以运行df.dtypes查看各列类型,应该会回到你初始的状态:数值列是float64,分类型列是object。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:34:04