繁体   English   中英

用“INF”替换 NaN 值

[英]Replace NaN values by 'INF'

我正在尝试过滤Pandas dataframe几行并替换过滤器标识的 NaN 值,以将它们替换为“无限”值。 基本上 loc[] 过滤掉列 nur=0 和 mtbur 为空的行(mtbur 和 nur 是整数)。 但是,我知道无限值在数据集中看起来并不干净。 因此,我该怎么做才能使我的查询工作,您建议我添加什么类似于“无限”值的内容?

这是一段代码:

df.loc[(df.mtbur.isnull()) & (df.nur==0)].fillna(value='INF')

我会使用np.inf

import numpy as np
m_inf = (df.mtbur.isnull()) & (df.nur==0)

使用DataFrame.maskDataFrame.where

df = df.mask(m_inf,np.inf)
#df = df.where(~m_inf,np.inf)

如果要选择特定列:

cols = [list_of_your_columns]
df[cols] = df[cols].mask(m_inf,np.inf)

使用DataFrame.fillna用布尔面膜np.inf值:

df = pd.DataFrame({
        'A':list('abcdef'),
         'mtbur':[np.nan,5,4,5,np.nan,np.nan],
         'nur':[0,0,9,0,0,3],
         'col':[np.nan] * 6,

})
mask = (df.mtbur.isnull()) & (df.nur==0)
df.loc[mask] = df.loc[mask].fillna(np.inf)
print (df)
   A  mtbur  nur  col
0  a    inf    0  inf
1  b    5.0    0  NaN
2  c    4.0    9  NaN
3  d    5.0    0  NaN
4  e    inf    0  inf
5  f    NaN    3  NaN

仅替换某些列:

mask = (df.mtbur.isnull()) & (df.nur==0)
cols = ['mtbur','A']
df.loc[mask, cols] = df.loc[mask, cols].fillna(np.inf)
print (df)
   A  mtbur  nur  col
0  a    inf    0  NaN
1  b    5.0    0  NaN
2  c    4.0    9  NaN
3  d    5.0    0  NaN
4  e    inf    0  NaN
5  f    NaN    3  NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM