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
数据引用