Advertencia futura: el uso de una secuencia que no sea de tuplas para la indexación multidimensional está en desuso, use `arr `

He buscado S / O pero no pude encontrar una respuesta para esto.

Cuando trato de trazar una plot de distribución usando un dispositivo marino, recibo una advertencia de futuro. Me preguntaba cuál podría ser el problema aquí.

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

Esta es la advertencia:

 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 

¿Alguna ayuda? Puede ejecutar el código anterior. Obtendrás la advertencia.

Pandas: 0.23.4 , nacido en el mar: 0.9.0 , matplotlib: 2.2.3 , scipy: 1.1.0 , numpy: 1.15.0'

Un rastro más completo sería bueno. Mi conjetura es que seaborn.distplot está usando scipy.stats para calcular algo. El error se produce en

 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 

Por lo tanto, en esta última línea, el indexer lista se utiliza para dividir 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]]) 

El uso de una lista de cortes funciona, pero el plan es depreciarse en el futuro. Se supone que los índices que involucran varias dimensiones son tuplas. El uso de listas en el contexto es un estilo antiguo que se está eliminando gradualmente.

Así que los desarrolladores scipy necesitan arreglar esto. Esto no es algo que los usuarios finales deban tener que enfrentar. Pero por ahora, no te preocupes por la futurewarning del futurewarning . No afecta a los cálculos ni al trazado. Hay una forma de suprimir las advertencias futuras, pero no lo sé de antemano.

Advertencia futura: el uso de una secuencia que no sea de tuplas para la indexación multidimensional está en desuso, use `arr [tuple (seq)]` en lugar de `arr [seq]`

Para python>=3.7 necesitas actualizar tu scipy>=1.2 .

Me encontré con la misma advertencia. Actualicé scipy, pandas y numpy. Todavía lo consigo. Lo consigo cuando uso seaborn.pairplot with kde, que debajo usa seaborn.kdeplot .

Si desea deshacerse de la advertencia, puede utilizar la biblioteca de advertencias. Ex:

 import warnings with warnings.catch_warnings(): your_code_block 

Estaba ejecutando seaborn.regplot, y me deshice de la advertencia al actualizar scipy 1.2 como sugirió NetworkMeister.

 pip install --upgrade scipy --user 

Si aún recibe advertencias en otras plots marítimas, puede ejecutar lo siguiente de antemano. Esto es útil en el cuaderno de Jupyter porque las advertencias hacen que el informe se vea mal incluso si sus plots son excelentes.

 import warnings warnings.filterwarnings("ignore")