Die Dinge funktionieren perfekt, wenn Sie NaN
s verwenden. None
ist nicht das Gleiche. A NaN
ist ein Schwimmer.
Als Beispiel:
import numpy as np
import matplotlib.pyplot as plt
plt.scatter([1, 2, 3], [1, 2, np.nan])
plt.show()
Werfen Sie einen Blick auf pandas
oder numpy maskierten Arrays (und numpy.genfromtxt
Ihre Daten laden), wenn Sie fehlende Daten zu handhaben wollen. Maskierte Arrays sind in numpy integriert, aber pandas
ist eine äußerst nützliche Bibliothek und hat eine sehr schöne Funktionalität für fehlende Werte.
Als Beispiel:
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
verwendet NaN
s maskierten Daten darzustellen, während maskierten Arrays eine separate Maske Array. Dies bedeutet, dass maskierte Arrays die ursprünglichen Daten möglicherweise beibehalten können, während sie vorübergehend als "fehlend" oder "schlecht" gekennzeichnet werden. Sie verwenden jedoch mehr Arbeitsspeicher und haben versteckte Fehler, die vermieden werden können, indem NaN
s verwendet wird, um fehlende Daten darzustellen.
Als weiteres Beispiel beide maskierte Arrays und NaN
s verwenden, dieses Mal mit einem Liniendiagramm:
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()
Wäre es ausreichen, um die NaN-Werte zu entfernen, wie in http://stackoverflow.com/questions/11620914/removing-nan-values-from-an-array beschrieben? –