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

Pandas float64转Object原因及all()删除全NaN行异常问题咨询

问题原因解答

1. 数据类型并没有真的发生转换

你看到的dtype: object是单行选取后的临时Series的类型,不是原DataFrame列的类型:

  • 原Uni. Su Profile、Min. Su两列的dtype始终是float64,从你打印的result.dtypes和子DataFrame的values输出(float类型的NaN)都可以验证
  • 当你用result.loc[7,['Uni. Su Profile','Min. Su']]选取单行多列数据时,返回的是一个Series,该Series中所有值都是NaN,pandas会自动将这个临时Series的兼容dtype设为object,属于单行选取的正常表现,不影响原数据的类型。

2. all()方法返回结果不符合预期的原因

pandas的all()方法默认开启skipna=True参数,会自动跳过NaN值再做判断:

  • 对于全为NaN的行,跳过所有NaN后相当于判断空序列的all()结果,而Python原生逻辑中空序列的all()返回值为True,这就是你看到第7行也返回True的原因,不属于异常。

正确删除全空行的方案

先对目标列做isna()空值判断,再按行校验是否全为空即可,示例代码如下:

# 筛选出Modeling为Undrained的行对应两列,判断是否全为NaN
mask = result.loc[result['Modeling']=='Undrained', ['Uni. Su Profile','Min. Su']].isna().all(axis=1)
# 过滤掉全为空的行,得到处理后的DataFrame
result = result[~mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:00:01