首页 > 解决方案 > 是否可以从 pandas 数据框中为列的子集选择视图而不进行切片?

问题描述

我正在使用接近可用内存的相当大的数据集。我想根据列名选择列的子集,然后保存此数据。我认为我不能像:2符号那样使用常规切片,所以我需要根据标签或位置进行选择。但似乎这样做的唯一方法是生成一个副本,每当我想保存数据的子集时,内存使用量就会大大增加。是否可以在不使用切片的情况下选择视图?或者是否有一些创造性的方式来使用可以让我选择任意位置的列的切片?

考虑以下:

import pandas as pd

df = pd.DataFrame([[1, 2, 1], [3, 4, 1]], columns=list('abc'))

# you can get a view using :2 slicing
my_slice = df.iloc[:, :2]
my_slice.iloc[0, 0] = 100

df
     a  b  c
0  100  2  1
1    3  4  1

my_slice
     a  b
0  100  2
1    3  4

这会返回一个视图,因此不会复制,但我通过切片获得了索引。

现在我尝试替代方案。

my_slice = df.iloc[:, [0, 1]]
my_slice.iloc[0, 0] = 99

my_slice
    a  b
0  99  2
1   3  4

df
     a  b  c
0  100  2  1
1    3  4  1

或者

my_slice = df.loc[:, ['a', 'b']]
my_slice.iloc[0, 0] = 55

my_slice
    a  b
0  55  2
1   3  4

df
     a  b  c
0  100  2  1
1    3  4  1

因此,最后两次尝试返回了一个副本。同样,这只是一个简单的例子。实际上,我有更多的列,并且我想要保存的列子集的位置可能不适合切片。这篇文章是相关的,因为它讨论了从数据框中选择列,但它并不关注能够选择视图。

标签: pythonpandas

解决方案


推荐阅读