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

从DataFrame提取单个值时,替换NaN的Pythonic方式是什么?

处理DataFrame单个NaN值的小技巧

嘿,我懂你遇到的这个小麻烦!先看我们的场景:假设我们有一个混着NaN和浮点数的DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame([[1,np.nan],[np.nan,4]],columns=['col1','col2'],index= ['row1','row2'])
df

输出结果是这样的:

col1  col2
row1  1.0  NaN
row2  NaN  4.0

我们都知道,要是给整列或者整行填充NaN,fillna()简直是神器,比如给col1列的NaN填99.0:

df.loc[:,'col1'].fillna(99.0)

输出立刻就规整了:

row1    1.0
row2    99.0
Name: col1, dtype: float64

但头疼的是,fillna()没法直接作用于单个单元格的NaN,所以你现在不得不写这种if判断:

if np.isnan(df.loc['row2','col1']): 
    val = 99.0
else:
    val = df.loc['row2','col1']

其实有更简洁的写法哦!给你俩实用方案:

  • 用pd.Series把单个值包装一下再用fillna,最后取第一个元素:

    val = pd.Series(df.loc['row2','col1']).fillna(99.0).iloc[0]
    
  • 或者用np.where一步到位,直接判断赋值:

    val = np.where(np.isnan(df.loc['row2','col1']), 99.0, df.loc['row2','col1'])
    

这两种写法都能替代繁琐的if-else,代码看起来清爽多啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:51