如何在熊猫中创建数据框视图?

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(...) 清晰得多,而且更适合一行。

以上是关于如何在熊猫中创建数据框视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫数据框中创建滑动窗口并应用函数

如何在熊猫中创建与多列相结合的数据框列

如何从熊猫数据框中创建一个字典?

如何通过在两行之间划分特定列中的值并保持其他列不变来在熊猫数据框中创建新行?

当组值不是唯一标识时如何在熊猫中创建堆积条

在熊猫数据框中创建重复列