Pandas Rolling Apply报错:apply()收到意外关键字参数mean
解决Pandas Rolling Apply传递额外参数的问题
嘿,这个问题我之前也碰到过!你出错的核心原因是:rolling().apply()方法本身的参数列表里并没有你自定义的mean参数,直接把mean=mean作为apply的关键字参数传入,自然会触发TypeError: apply() got an unexpected keyword argument 'mean'的错误。
要给自定义函数传递额外参数,你需要用到apply()专门提供的args或kwargs参数,下面给你两种可行的解决方案:
方案1:使用args传递位置参数
把额外参数打包成元组传给args参数(哪怕只有一个参数,也要加逗号保证是元组类型,避免被识别成单个元素):
import pandas as pd df_test = pd.DataFrame(columns=['amount']) df_test['amount'] = [1, 2, 3, 4, 5] mean = df_test['amount'].mean() def rule(x, mean): x = x - mean return sum(x) # 用args传递mean参数 result = df_test['amount'].rolling(3).apply(rule, args=(mean,)) print(result)
方案2:使用kwargs传递关键字参数
把额外参数整理成字典传给kwargs参数,字典的键名要和自定义函数的参数名完全一致:
import pandas as pd df_test = pd.DataFrame(columns=['amount']) df_test['amount'] = [1, 2, 3, 4, 5] mean = df_test['amount'].mean() def rule(x, mean): x = x - mean return sum(x) # 用kwargs传递mean参数 result = df_test['amount'].rolling(3).apply(rule, kwargs={'mean': mean}) print(result)
两种方案都能正常运行,输出结果如下:
0 NaN 1 NaN 2 -3.000000 3 -1.000000 4 1.000000 Name: amount, dtype: float64
内容的提问来源于stack exchange,提问作者s900n
相关产品推荐
相关产品推荐

