DataFrame缺失值填充报错:'function' object is not subscriptable 求助
问题分析与解决办法
嘿,我来帮你搞定这个报错!你遇到的"'function' object is not subscriptable"错误,根源其实很简单——你调用pd.isnull的方式错了。
错误原因
在你的fill_thm函数里,这行代码:
if pd.isnull[THM]:
pd.isnull是pandas提供的一个函数,要给它传参数必须用圆括号(),而你用了方括号[]。方括号是用来给列表、字典、Series这类可下标访问的对象取值的,函数本身不支持这种操作,所以Python就抛出了这个错误。
解决办法
方法1:修正函数调用方式
把pd.isnull[THM]改成pd.isnull(THM),修正后的完整函数如下:
def fill_thm(cols): THM = cols[0] Season_index = cols[1] if pd.isnull(THM): if Season_index == 1: return 10 elif Season_index == 2: return 20 elif Season_index == 3: return 30 else: return 40 else: return THM
之后再运行你的apply代码就不会报错了。
方法2:更高效的替代写法(推荐)
其实用apply处理大数据量时效率不高,你可以用np.select或者映射字典的方式来实现,代码更简洁且性能更好:
import numpy as np # 定义条件和对应的值 conditions = [ maple['Season_index'] == 1, maple['Season_index'] == 2, maple['Season_index'] == 3, maple['Season_index'] == 4 ] values = [10, 20, 30, 40] # 填充缺失值 maple['THM'] = maple['THM'].fillna(np.select(conditions, values, default=40))
或者用字典映射的方式:
season_map = {1:10, 2:20, 3:30, 4:40} maple['THM'] = maple['THM'].fillna(maple['Season_index'].map(season_map))
这两种写法都能达到同样的填充效果,而且比apply更快哦。
内容的提问来源于stack exchange,提问作者Rafael Paulino
相关产品推荐
相关产品推荐

