数据框kidsSingleHeads94_98
是从数据框创建的mydata94_98
。.is_copy
的属性显示kidsSingleHeads94_98
了对 的弱引用mydata94_98
。
>>> kidsSingleHeads94_98.is_copy
<weakref at 0x000000010ECE0EF8; to 'DataFrame' at 0x000000010DCDE048>
>>> hex(id(mydata94_98))
'0x10dcde048'
Run Code Online (Sandbox Code Playgroud)
此.rename
操作会inplace = True
触发SettingWithCopy
警告,我不确定为什么会出现这种情况。我的印象是,这inplace = True
意味着您没有创建被操作的底层数据帧的副本,而是正在操作……就地……
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
Run Code Online (Sandbox Code Playgroud)
我一直在努力理解视图和副本之间的区别。据我所知,对数据框视图的设置会修改它,而对它的副本进行设置则不会。
摘自 Wes McKinney 的《Python 数据分析》第 12 页。114
索引 DataFrame 时返回的列是基础数据的视图,而不是副本。因此,对 Series 的任何就地修改都将反映在 DataFrame 中。可以使用系列的复制方法显式复制该列。
我认为对数据帧进行子设置并将值设置为该子集的其他内容可以创建副本,由于将新数据写入内存需要额外的工作,因此成本可能会很高?我对此不太清楚。
笔记
我设置了pd.options.mode.chained_assignment = 'raise'
python 会引发异常并使程序崩溃。我使用错误消息中的回溯来准确找到触发问题的命令SettingWithCopy
。默认设置为'warn'
。
归档时间: |
|
查看次数: |
2493 次 |
最近记录: |