从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
相关产品推荐
相关产品推荐

