将set_axis inplace=True转换为copy=False后,Pandas sort_values错误

x33g5p2x  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(201)

新的编程。我正在使用康达python3.9与Pandas1.5.2。运行jupyter笔记本一些数据处理。我有两行
buffer_status.set_axis(['项目ID','更新时间','项目名称'],轴='列',位置=真)buffer_status.sort_values(按='项目ID',升序=假,位置=真)
它警告我set_axis 'inplace'关键字已过时,将在未来版本中删除。请改用obj = obj.set_axis(..., copy=False)
但是它起作用了,所以我听从了他们的建议,更换到位

buffer_status.set_axis(['ProjectID','UpdatedAt','ProjectName'],axis='columns', copy=False)
buffer_status.sort_values(by='ProjectID', ascending=False, inplace=True)

它给出了以下错误(只是复制他们的亮点)

-> 35 buffer_status.sort_values(by='ProjectID', ascending=False, inplace=True)
-> 6909     k = self._get_label_or_level_values(by, axis=axis)
-> 1850     raise KeyError(key)
   1852 # Check for duplicates
   1853 if values.ndim > 1:

你知道为什么set_axis copy=False不适用于sort_values吗?

31moq8wy

31moq8wy1#

你没有完全听从他们的建议,他们提到obj = obj.DoSomething():
因此它应该是:

buffer_status = buffer_status.set_axis(['ProjectID','UpdatedAt','ProjectName'],axis='columns', copy=False)

这样,变量buffer_status实际上被改变了,因为你只是在原处移除,变量没有“在其原处”被修改,所以你必须将改变分配到某个地方,或者是一个新变量,或者是随后被更新的相同变量。
因此,set_axis代码当前正在执行,但结果未被存储,因此buffer_status没有列ProjectID,这就是为什么会出现KeyError(键ProjectID不在列中)。

相关问题