TypeError: apply() got an unexpected keyword argument ‘raw‘ 解决办法有了!

困扰了我近两周时间的一个报错,今天终于找到解决办法了,希望对大家有所参考,也同时为了更好地帮自己记录一下,方便以后查看。

自己所用的环境是python3.6,pandas是0.22.0,而且前提条件是这环境不能动,暂时起名叫它环境A吧;
编写了一段代码,我测试环境用的pandas版本是1.5.2,代码运行一切正常,可是导入到环境A,就报错。发现报错如下:
TypeError: apply() got an unexpected keyword argument ‘raw’
通过网上各种搜索,原因竞是Pandas版本的高低不兼容导致的。

根据报错位置向上排查导入的第三方库的源代码,查到是这段代码出了问题,
return np.array(pd.Series(S).rolling(A+1).apply(lambda x:np.all(x[::-1][B:]), raw=False),dtype=bool)。原因是这段源代码写法使用了高版本的功能,低版的pandas不支持,引起报错。

于是用ChitGPT,进行提问,用如下命令:

np.array(pd.Series(S).rolling(A+1).apply(lambda x:np.all(x[::-1][B:]), raw=False),dtype=bool) 请把此代码转换成适合pandas0.22.0版本所支持的格式

结果返回如下:

 rolling_window = pd.Series(S).rolling(A+1)
 result = rolling_window.apply(lambda x: np.all(x[::-1][B:]))
 result = result.fillna(False).astype(bool)
 result = np.array(result)
 return result

在这个修改后的代码中,我们首先使用rolling函数创建一个滚动窗口对象。然后,我们将一个函数作为参数传递给apply方法,该函数接收窗口中的数据并返回结果。由于没有raw参数,我们需要手动计算窗口中的数据,以确保其与原始代码的行为相同。最后,我们将结果转换为布尔类型的Numpy数组。需要注意的是,在 Pandas 0.22.0 版本中,rolling函数的默认行为是在窗口中包含缺失值,并且不允许返回任何缺失值。因此,我们使用 fillna 方法将缺失值替换为 False。

源代码修改后,重启无报错。太感谢这个时代的ChitGPT伟大力量了。也感谢CSDN官方有如此多的人才,共同提供和维护了这个平台。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值