为什么只有df.to_numpy()参与计算时,数据帧被改变了?

问题描述 投票:0回答:1
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 根本没有。然而,这两个 DDistance_df 最后都被改成了(同一种东西)。

虽然我不明白为什么 D 也不会改变,这是行为的。Distance_df最让我困惑的是数据框架 它在代码中都没有出现,怎么可能被改变? 不知怎的,我感觉这不是代码的问题,而是幕后如何处理值和对象的问题。谁能解释一下?

python pandas dataframe object numpy-ndarray
1个回答
1
投票

你需要添加 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) 以确保 DDistance_df 是独立的对象。


1
投票

试图获得一个不被修改的数据帧副本。

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()

1
投票
D = Distance_df.to_numpy()

正在运行 D is Distance_df 返回 True. 这两个变量都指的是同一个对象。

但是,如果您使用 D = Distance_df.copy().to_numpy(), D is Distance_df 将返回 False. 它们现在是不同的对象。

这只是 Python 处理变量引用的方式。

© www.soinside.com 2019 - 2024. All rights reserved.