首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fillna on片,在其他数据帧中

Fillna on片,在其他数据帧中
EN

Stack Overflow用户
提问于 2019-05-09 10:14:07
回答 1查看 113关注 0票数 1

我想要更改一个函数,该函数将指示器列中的单个值填充为填充Nan (0)--堆叠数据格式的值列,以处理指示符的列表,其中的Nan值应设置为零。

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame({'ISO3': ['Australia', 'Austria', 'Belgium', 'Canada', 'Australia', 'Austria', 'Belgium', 'Canada'], 
                   'Year': [1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991],
                   'Indicator' : ['Disaster Fatalities', 'Disaster Fatalities', 'Disaster Fatalities', 'Disaster Fatalities', 'Oil Reserves', 'Oil Reserves', 'Oil Reserves', 'Oil Reserves' ],
                   'Value' : [np.nan, 5, np.nan, 18, np.nan, np.nan, np.nan, np.nan]
                  })
df.head(8)

给予:

代码语言:javascript
复制
ISO3    Year    Indicator   Value
0   Australia   1991    Disaster Fatalities NaN
1   Austria 1991    Disaster Fatalities 5.0
2   Belgium 1991    Disaster Fatalities NaN
3   Canada  1991    Disaster Fatalities 18.0
4   Australia   1991    Oil Reserves    NaN
5   Austria 1991    Oil Reserves    NaN
6   Belgium 1991    Oil Reserves    NaN
7   Canada  1991    Oil Reserves    NaN

函数,将单个指示符的Nan值设置为零:

代码语言:javascript
复制
def zerofillnaindicator (df, Indicators):
    mask = (df['Indicator'] == Indicators)
    df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
    return df

代码语言:javascript
复制
df2 = zerofillnaindicator (df = df, Indicators = 'Disaster Fatalities')
df2.head(8)

按需要给予:

代码语言:javascript
复制
ISO3    Year    Indicator   Value
0   Australia   1991    Disaster Fatalities 0.0
1   Austria 1991    Disaster Fatalities 5.0
2   Belgium 1991    Disaster Fatalities 0.0
3   Canada  1991    Disaster Fatalities 18.0
4   Australia   1991    Oil Reserves    NaN
5   Austria 1991    Oil Reserves    NaN
6   Belgium 1991    Oil Reserves    NaN
7   Canada  1991    Oil Reserves    NaN

但是,我如何改变这一点,以获得这样的指标清单:

代码语言:javascript
复制
df2 = zerofillnaindicator (df = df, Indicators = ['Disaster Fatalities', 'Oil Reserves'])
df2.head(8)

我尝试用df.isin(Indicators)替换掩码的条件,但这导致了.isin函数上的“不能用多维键进行索引”错误。

代码语言:javascript
复制
def zerofillnaindicator (df, Indicators):
    mask = df.isin(Indicators)
    df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
    return df
EN

回答 1

Stack Overflow用户

发布于 2019-05-09 10:17:41

如果需要在同一个函数中处理标量或列表,请使用isinstance将标量转换为一个元素列表:

代码语言:javascript
复制
def zerofillnaindicator (df, Indicators):
    vals = [Indicators] if isinstance(Indicators, str) else Indicators

    mask = df['Indicator'].isin(vals)
    df.loc[mask, 'Value'] = df.loc[mask, 'Value'].fillna(0)
    return df

df2 = zerofillnaindicator (df = df, Indicators = 'Disaster Fatalities')
print (df2)
        ISO3  Year            Indicator  Value
0  Australia  1991  Disaster Fatalities    0.0
1    Austria  1991  Disaster Fatalities    5.0
2    Belgium  1991  Disaster Fatalities    0.0
3     Canada  1991  Disaster Fatalities   18.0
4  Australia  1991         Oil Reserves    NaN
5    Austria  1991         Oil Reserves    NaN
6    Belgium  1991         Oil Reserves    NaN
7     Canada  1991         Oil Reserves    NaN

df3 = zerofillnaindicator (df = df, Indicators = ['Disaster Fatalities', 'Oil Reserves'])
print (df3)
        ISO3  Year            Indicator  Value
0  Australia  1991  Disaster Fatalities    0.0
1    Austria  1991  Disaster Fatalities    5.0
2    Belgium  1991  Disaster Fatalities    0.0
3     Canada  1991  Disaster Fatalities   18.0
4  Australia  1991         Oil Reserves    0.0
5    Austria  1991         Oil Reserves    0.0
6    Belgium  1991         Oil Reserves    0.0
7     Canada  1991         Oil Reserves    0.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56057153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档