【问题标题】:Trying to fill Data-frame missing values using a function and apply()尝试使用函数和 apply() 填充数据框缺失值
【发布时间】:2017-12-06 01:14:34
【问题描述】:

我正在尝试使用基于国家/地区的不同值来填充数据集的缺失值

def avgtemp(列): 平均温度 = cols[0] 国家 = cols[1] 如果 state.isnull(AverageTemperature): 如果国家 == “巴西”: 返回 23.770601 elif 国家 == “俄罗斯”: 返回 1.808555 elif 国家 == “美国”: 返回 10.701555 elif 国家 == “加拿大”: 返回 -1.321079 elif 国家 == “印度”: 返回 22.534576 elif 国家 == “中国”: 返回 11.206830 elif 国家 == “澳大利亚”: 返回 17.664222 别的: 返回 8.9931 别的: 返回平均温度 state['AverageTemperature'] = state[['AverageTemperature','Country']].apply(avgtemp,axis=1)

但我不断收到此错误

-------------------------------------------------- ------------------------- TypeError Traceback(最近一次调用最后一次) 在 () ----> 1 state['AverageTemperature'] = state[['AverageTemperature','Country']].apply(avgtemp,axis=1) C:\Anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 4059 如果减少是无: 4060减少=真 -> 4061 返回 self._apply_standard(f, axis, reduce=reduce) 4062 其他: 第4063章 C:\Anaconda3\lib\site-packages\pandas\core\frame.py 在 _apply_standard(self, func, axis, ignore_failures, reduce) 4155 尝试: 4156 for i, v in enumerate(series_gen): -> 4157 个结果[i] = func(v) 第4158章 4159 例外为 e: 在 avgtemp(cols) 3 国家 = 列 [1] 4 ----> 5 如果 state.isnull(AverageTemperature): 6 7 如果国家 == “巴西”: TypeError: ('isnull() 接受 1 个位置参数,但给出了 2 个','发生在索引 0')

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以通过locisnull 查找值并替换为map

    state = pd.DataFrame({'Country':['Brazil','Russia','Slovakia','Russia'],
                       'AverageTemperature':[np.nan, np.nan, np.nan, 23]})
    print (state)
       AverageTemperature   Country
    0                 NaN    Brazil
    1                 NaN    Russia
    2                 NaN  Slovakia
    3                23.0    Russia
    
    #add all values to dict
    d = {"Brazil":23.770601, "Russia":1.808555, ...}
    
    mask = state['AverageTemperature'].isnull()
    state.loc[mask, 'AverageTemperature'] = state.loc[mask, 'Country'].map(d)
    #all another NaNs replace by default value 
    state['AverageTemperature'] = state['AverageTemperature'].fillna(8.9931)
    print (state)
       AverageTemperature   Country
    0           23.770601    Brazil
    1            1.808555    Russia
    2            8.993100  Slovakia
    3           23.000000    Russia
    

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多