Le cose funzioneranno perfettamente se si utilizza NaN
s. None
non è la stessa cosa. A NaN
è un float.
Per fare un esempio:
import numpy as np
import matplotlib.pyplot as plt
plt.scatter([1, 2, 3], [1, 2, np.nan])
plt.show()
Dai un'occhiata alla pandas
o NumPy array mascherati (e numpy.genfromtxt
per caricare i dati), se si desidera gestire i dati mancanti. Gli array mascherati sono incorporati in numpy, ma pandas
è una libreria estremamente utile e presenta funzionalità di valore mancanti molto interessanti.
Ad esempio:
import matplotlib.pyplot as plt
import pandas
x = pandas.Series([1, 2, 3])
y = pandas.Series([1, 2, None])
plt.scatter(x, y)
plt.show()
pandas
utilizza NaN
s per rappresentare i dati mascherati, mentre le matrici mascherati utilizzano una matrice di maschera separata. Ciò significa che gli array mascherati possono potenzialmente conservare i dati originali, segnalandoli temporaneamente come "mancanti" o "cattivi". Tuttavia, usano più memoria e hanno dei trucchi nascosti che possono essere evitati usando NaN
s per rappresentare i dati mancanti.
Come altro esempio, utilizzando entrambi gli array in maschera e NaN
s, questa volta con una trama:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 6 * np.pi, 300)
y = np.cos(x)
y1 = np.ma.masked_where(y > 0.7, y)
y2 = y.copy()
y2[y > 0.7] = np.nan
fig, axes = plt.subplots(nrows=3, sharex=True, sharey=True)
for ax, ydata in zip(axes, [y, y1, y2]):
ax.plot(x, ydata)
ax.axhline(0.7, color='red')
axes[0].set_title('Original')
axes[1].set_title('Masked Arrays')
axes[2].set_title("Using NaN's")
fig.tight_layout()
plt.show()
sarebbe sufficiente per rimuovere i valori NaN come descritto in http://stackoverflow.com/questions/11620914/removing-nan-values-from-an-array? –