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