当我们通过 df.iloc 方法将变量分配给单个 numpy.float64 时,df 会被公开吗?



df=pd.DataFrame([[2,4,6],[5,7,8],[2,4,6],[5,7,8],[2,4,6],[5,7,8]])

0  1  2
0  2  4  6
1  5  7  8
2  2  4  6
3  5  7  8
4  2  4  6
5  5  7  8

当我们为df.iloc分配一个变量时,比如说extract=df.iloc[2:5,0:2],我知道引用到变量提取的数据是公开的(可变到df(。但是,如果我想只将变量引用到一个确切的数字(例如,extract=df.iloc[3,4](,原始 df 是否仍然暴露在提取中?(以及将单个数字复制到变量的最佳方法是什么?当我做print(type(df.iloc[3,4])时,我注意到类型是<class 'numpy.float64'>。这是对象引用还是原始数据?

No. 当您将df.iloc[3, 2]返回的内容分配给extract并运行type(extract)时,您将获得numpy.int64.

您可以通过查看is_copy属性来判断某些内容将在源数据帧上运行。

extract = df.iloc[2:5, 0:2]
type(extract)
pandas.core.frame.DataFrame

print(extract.is_copy)
<weakref at 0x11b27cd60; to 'DataFrame' at 0x11bd64050>

因此,在这种情况下,extract指向与df相同的数据。

我们可以用各种情况进行测试

extract = df.iloc[[4], 1]
type(extract)
pandas.core.series.Series

print(extract.is_copy)
None

extract = df.iloc[[2], [1]]
type(extract)
pandas.core.frame.DataFrame

print(extract.is_copy)
<weakref at 0x11b27c100; to 'DataFrame' at 0x11bd642d0>

似乎如果您使用两个生成[2][0, 1]:2等数组的索引器来切片df并保持数据帧维度,那么我们将获得一个包含连接数据的数据帧。


一个索引器呢

extract = df.iloc[:2]
print(extract.is_copy)
<weakref at 0x11b27c100; to 'DataFrame' at 0x11bd642d0>

是的,仍然是对df数据引用

如果你想确保你不是

extract = df.iloc[[2], [1]].copy()
print(extract.is_copy)
None

不是对df数据引用

最新更新