import pandas as pd
import numpy as np
url = "https://raw.githubusercontent.com/PawinData/UC/SFBA/DistanceMatrix_shortestnetworks.csv"
Distance_df = pd.read_csv(url, index_col=0)
D = Distance_df.to_numpy()
我有一个数据帧 Distance_df
然后我把它转换成一个numpy数组。D
的计算。随后发生的事情只涉及 D
而不涉及 Distance_df
根本没有。然而,这两个 D
和 Distance_df
最后都被改成了(同一种东西)。
虽然我不明白为什么 D
也不会改变,这是行为的。Distance_df
最让我困惑的是数据框架 它在代码中都没有出现,怎么可能被改变? 不知怎的,我感觉这不是代码的问题,而是幕后如何处理值和对象的问题。谁能解释一下?
你需要添加 copy=True
作为对 to_numpy()
.
根据 DataFrame.to_numpy
文件。
复制.bool,默认为False。bool, 默认为False
是否确保返回的值不是另一个数组的视图。注意
copy=False
不 确保 该to_numpy()
是没有副本的。而是。copy=True
即使不是严格意义上的必要,也要确保抄写。
换句话说,写 D = Distance_df.to_numpy()
可 导致 D
的底层numpy数组的引用。Distance_df
,而不是复制它们。
编写 D = Distance_df.to_numpy(copy=True)
以确保 D
和 Distance_df
是独立的对象。
试图获得一个不被修改的数据帧副本。
import pandas as pd
import numpy as np
url="https://raw.githubusercontent.com/PawinData/UC/SFBA/DistanceMatrix_shortestnetworks.csv"
Distance_df = pd.read_csv(url, index_col=0)
df=Distance_df.copy()
D = df.to_numpy()
D = Distance_df.to_numpy()
正在运行 D is Distance_df
返回 True
. 这两个变量都指的是同一个对象。
但是,如果您使用 D = Distance_df.copy().to_numpy()
, D is Distance_df
将返回 False
. 它们现在是不同的对象。
这只是 Python 处理变量引用的方式。