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

J'ai un dataframe Distance_df et je le convertis en un tableau numpy D pour le calcul. Ce qui se passe ensuite ne concerne que D et n'implique pas du tout Distance_df. Cependant, D et Distance_df sont modifiés (à la même chose) à la fin.

Bien que je ne sache pas pourquoi D changerait non plus, c'est le comportement de Distance_df, le dataframe, qui me déroute le plus. Comment peut-il être modifié alors qu'il n'apparaît même pas dans le code? D'une manière ou d'une autre, je sens qu'il ne s'agit pas du code mais de la manière dont les valeurs et les objets sont gérés en arrière-plan. Quelqu'un peut-il expliquer un peu?

0
Paw in Data 2 juin 2020 à 16:53

3 réponses

Meilleure réponse

Vous devez ajouter copy=True comme argument à to_numpy().

Selon DataFrame.to_numpy docs:

copie: booléen, False par défaut

S'il faut s'assurer que la valeur renvoyée n'est pas une vue sur un autre tableau. Notez que copy=False ne garantit que to_numpy() est sans copie. Assurez-vous plutôt copy=True qu'une copie est effectuée, même si ce n'est pas strictement nécessaire.

En d'autres termes, écrire D = Distance_df.to_numpy() peut aboutir à ce que D soit une référence aux tableaux numpy sous-jacents de Distance_df, au lieu de les copier.

Écrivez D = Distance_df.to_numpy(copy=True) pour vous assurer que D et Distance_df sont des objets indépendants.

1
jfaccioni 2 juin 2020 à 14:05
D = Distance_df.to_numpy()

En cours d'exécution maintenant D is Distance_df renvoie True. Les deux variables font référence au même objet.

Cependant, si vous faites D = Distance_df.copy().to_numpy(), D is Distance_df renverra False. Ce sont maintenant des objets différents.

C'est juste comment Python gère les références de variables.

1
0buz 2 juin 2020 à 14:05

Essayez d'obtenir une copie de dataframe pour ne pas être modifiée

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
sametsokel 2 juin 2020 à 14:03