web-dev-qa-db-fra.com

FutureWarning: l'utilisation d'une séquence non-Tuple pour l'indexation multidimensionnelle est déconseillée, utilisez `arr [Tuple (seq)]`

J'ai cherché S/O mais je n'ai pas pu trouver de réponse à cette question.

Lorsque j'essaie de tracer un tracé de distribution en utilisant Seaborn, je reçois un message d'avenir. Je me demandais quel pourrait être le problème ici.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
% matplotlib inline
from sklearn import datasets

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['class'] = iris.target
df['species'] = df['class'].map({idx:s for idx, s in enumerate(iris.target_names)})


fig, ((ax1,ax2),(ax3,ax4))= plt.subplots(2,2, figsize =(13,9))
sns.distplot(a = df.iloc[:,0], ax=ax1)
sns.distplot(a = df.iloc[:,1], ax=ax2)
sns.distplot(a = df.iloc[:,2], ax=ax3)
sns.distplot(a = df.iloc[:,3], ax=ax4)
plt.show()

C'est l'avertissement:

C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\stats.py:1713:
FutureWarning: Using a non-Tuple sequence for multidimensional indexing is deprecated; 
use `arr[Tuple(seq)]` instead of `arr[seq]`. 
In the future this will be interpreted as an array index, `arr[np.array(seq)]`,
which will result either in an error or a different result.
return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval

De l'aide? Vous pouvez exécuter le code ci-dessus. Vous aurez l'avertissement.

Pandas: 0.23.4, né en mer: 0.9.0, matplotlib: 2.2.3, scipy: 1.1.0, numpy: 1.15.0'

19
user_6396

Une trace plus complète serait bien. Je suppose que c'est seaborn.distplot utilise scipy.stats pour calculer quelque chose. L'erreur se produit dans

def _compute_qth_percentile(sorted, per, interpolation_method, axis):
    ....
    indexer = [slice(None)] * sorted.ndim
    ...
    indexer[axis] = slice(i, i + 2)
    ...
    return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval

Donc dans cette dernière ligne, la liste indexer est utilisée pour couper sorted.

In [81]: x = np.arange(12).reshape(3,4)
In [83]: indexer = [slice(None), slice(None,2)]
In [84]: x[indexer]
/usr/local/bin/ipython3:1: FutureWarning: Using a non-Tuple sequence for multidimensional indexing is deprecated; use `arr[Tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.
  #!/usr/bin/python3
Out[84]: 
array([[0, 1],
       [4, 5],
       [8, 9]])
In [85]: x[Tuple(indexer)]
Out[85]: 
array([[0, 1],
       [4, 5],
       [8, 9]])

L'utilisation d'une liste de tranches fonctionne, mais le plan est de se déprécier à l'avenir. Les index qui impliquent plusieurs dimensions sont supposés être des n-uplets. L'utilisation de listes dans le contexte est un style plus ancien qui est progressivement supprimé.

Les développeurs scipy doivent donc résoudre ce problème. Ce n'est pas quelque chose que les utilisateurs finaux devraient avoir à traiter. Mais pour l'instant, ne vous inquiétez pas pour le futurewarning. Cela n'affecte pas les calculs ou le tracé. Il existe un moyen de supprimer les avertissements futurs, mais je ne le sais pas de suite.

FutureWarning: L'utilisation d'une séquence non-Tuple pour l'indexation multidimensionnelle est déconseillée. Utilisez `arr [Tuple (seq)]` au lieu de `arr [seq]`

9
hpaulj

Pour python>=3.7 vous devez mettre à niveau votre scipy>=1.2.

20
NetworkMeister

J'exécutais seaborn.regplot, et je me suis débarrassé de l'avertissement en mettant à niveau scipy 1.2 comme l'avait suggéré NetworkMeister.

pip install --upgrade scipy --user

Si vous recevez toujours des avertissements dans d'autres parcelles créées par la mer, vous pouvez exécuter préalablement les opérations suivantes. Ceci est utile dans Jupyter Notebook car les avertissements rendent en quelque sorte le rapport sombre même si vos graphiques sont géniaux.

import warnings
warnings.filterwarnings("ignore")
3
Sarah

Je suis tombé sur le même avertissement. J'ai mis à jour scipy, pandas et numpy. Je l’obtiens toujours. Je l’obtiens quand j’utilise seaborn.pairplot avec kde, qui utilise en dessous seaborn.kdeplot.

Si vous souhaitez vous débarrasser de l'avertissement, vous pouvez utiliser la bibliothèque d'avertissements. Ex:

import warnings

with warnings.catch_warnings():

    your_code_block
2
Andrés Rojas