如何在熊猫中创建数据框视图?
Posted
技术标签:
【中文标题】如何在熊猫中创建数据框视图?【英文标题】:How to create a view of dataframe in pandas? 【发布时间】:2017-02-19 17:32:56 【问题描述】:我有一个大数据框(10m 行,40 列,7GB 内存)。我想创建一个视图,以便为表达复杂的视图提供简写名称,而不会再增加 2-4 GB 的内存使用量。换句话说,我宁愿输入:
df2
比:
df.loc[complicated_condition, some_columns]
documentation 声明,虽然使用.loc
确保设置值会修改原始数据帧,但仍然不能保证.loc
返回的对象是视图还是副本。
我知道我可以将条件和列列表分配给变量(例如df.loc[cond, cols]
),但我通常很想知道是否可以创建数据框的视图。
编辑:相关问题:
What rules does Pandas use to generate a view vs a copy? Pandas: Subindexing dataframes: Copies vs views【问题讨论】:
你找到答案了吗?我也想这样做…… 不,我没有!我目前的理解是,您无法控制什么是视图,什么是副本。你必须相信内存管理(在 numpy 中)是有效的...... 关于您对 .loc 返回的对象是视图还是副本的第一次观察,this 可能会回答您的问题。 @JattYeo 非常有趣,谢谢,我在我的问题中添加了问题的链接 【参考方案1】:您通常无法返回视图。
您的答案在 pandas 文档中: returning-a-view-versus-a-copy.
只要标签数组或布尔向量包含在 索引操作,结果将是一个副本。带单标签 / 标量索引和切片,例如df.ix[3:6] 或 df.ix[:, 'A'],一个视图 将被退回。
此答案在以下帖子中找到:Link。
【讨论】:
所以,对 topicstarter 问题的回答是“不,如果条件足够复杂(即包含标签数组),通常不可能创建 pandas 数据框的视图”? 顶部链接现在重定向到没有此文本的页面(或者似乎没有提及如何具体返回视图与副本,只有 SettingWithCopy 警告说明) 使用@Anatoly Alekseev 输入编辑答案并更新链接。 最新 Pandas docs 表示不再保证返回视图或副本 很遗憾。df_view=df_view.apply(...)
比 df.loc[ind1, ind2]=df.loc[ind1, ind2].apply(...)
清晰得多,而且更适合一行。以上是关于如何在熊猫中创建数据框视图?的主要内容,如果未能解决你的问题,请参考以下文章