为什么使用inplace = True重命名数据框列会触发带有复制警告的设置?

时间:2017-02-20 15:34:27

标签: python pandas

数据框kidsSingleHeads94_98是从数据框mydata94_98创建的。 .is_copy的{​​{1}}属性显示对kidsSingleHeads94_98的弱引用。

mydata94_98

>>> kidsSingleHeads94_98.is_copy <weakref at 0x000000010ECE0EF8; to 'DataFrame' at 0x000000010DCDE048> >>> hex(id(mydata94_98)) '0x10dcde048' 这项.rename次操作会触发inplace = True警告,我不确定为什么会这样。我的印象是SettingWithCopy意味着你创建被操纵的基础数据框的副本,但是正在运行......就位......

inplace = True

我一直在努力理解观点和副本之间的区别。我知道在数据框视图上设置会对其进行修改,而在副本上设置则不会。

来自Wes McKinney的 Python for Data Analysis pg。 114

  

索引DataFrame时返回的列是基础数据上的视图,而不是副本。因此,对系列的任何就地修改都将反映在DataFrame中。可以使用Series&#39;明确复制该列。 复制方法。

我认为使用该子集对数据帧进行子设置并将值设置为其他内容可以创建副本,这可能会因为将新数据写入内存而付出额外费用?我不清楚这一点。

注意

我设置kidsSingleHeads.rename( columns = { "Gender":"GenderChild", "Age":"AgeChild", "EducationYears":"EducationYearsChild" }, inplace = True ) pandas.core.common.SettingWithCopyError: A value is trying to be set on a copy of a slice from a DataFrame 因此python会引发异常并导致程序崩溃。我在错误消息中使用了回溯,以便准确找到触发pd.options.mode.chained_assignment = 'raise'问题的命令。默认设置为SettingWithCopy

0 个答案:

没有答案