为了账号安全,请及时绑定邮箱和手机立即绑定

为什么只有 df.to_numpy() 参与计算时数据帧会发生变化?

为什么只有 df.to_numpy() 参与计算时数据帧会发生变化?

万千封印 2022-12-20 15:32:46
import pandas as pdimport numpy as npurl = "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最让我困惑的是 dataframe 的行为。当它甚至没有出现在代码中时,如何更改它?不知何故,我感觉到这与代码无关,而是与值和对象在幕后的处理方式有关。谁能解释一下?
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您需要将copy=True作为参数添加到to_numpy().

根据DataFrame.to_numpy文档:

副本: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是独立的对象。


查看完整回答
反对 回复 2022-12-20
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

尝试获取不被更改的数据框副本


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


查看完整回答
反对 回复 2022-12-20
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

D = Distance_df.to_numpy()

现在运行D is Distance_df返回True。两个变量都引用同一个对象。


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


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


查看完整回答
反对 回复 2022-12-20
  • 3 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信