繁体   English   中英

'tuple' object 不支持项目分配 - DataFrame

[英]'tuple' object does not support item assignment - DataFrame

我有一个数据框字典d ,其中键是名称,值是实际数据框。 我有一个 function 规范化一些数据帧并吐出一个 plot,标题。 function 从d.items()中获取一个元组(作为参数df ),因此第一个(第 0 个)元素是名称,下一个是数据帧。

我必须对 function 中的数据框进行一些操作,并且我使用df[1]这样做没有任何问题。 但是,一行是df[1] = df[1].round(2) ,这会引发错误'tuple' object does not support item assignment 我已经通过在此行之前打印出它的类型 write 来验证df[1]是一个数据帧。 为什么这不起作用? 它不是一个元组。

那是因为你的变量是一个元组,你不能分配给一个元组。 元组是不可变的。 我对你的问题的理解:

from pandas import DataFrame

d    = {'mydf' : DataFrame({'c1':(1,2),'c2':(4,5)}) } #A dictionary of DFs. 
i    = list(d.items())[0]                             #The first item from .items()
i[1] = i[1].round(2)                                  #ERROR

请注意,“i”是一个元组,因为那是.items() 返回的内容(元组)。 即使您要覆盖的内容是可变的,您也无法保存到 i 中。 我知道这听起来很奇怪,因为你可以这样做:

x = (7,[1,2,3])
x[1].append(4)
print(x)

这样做的原因很复杂。 本质上,上面的元组存储了指向元组内信息的指针(而不是数据本身)。 因此,如果您访问元组的项目(如 x[1]),则 python 会将您带到该指针项目(在我的情况下为列表)并允许您在其上运行 append,因为该列表是可变的。 在您的情况下,您不是试图单独访问 i[1] ,而是试图覆盖元组中的 i[1] 条目。 希望这是有道理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM