NumPy oder Pandas: Halten array Typ as integer, während Sie mit einem NaN-Wert
Gibt es eine bevorzugte Weg, um den Datentyp einer numpy
array fester als int
(oder int64
oder was auch immer), während immer noch ein element im inneren aufgelistet, wie numpy.NaN
?
In allem bin ich mit der Konvertierung eines in-house-Daten-Struktur, um ein Pandas DataFrame. In unserer Struktur haben wir Ganzzahl-Spalten, die noch NaN ' s (aber die dtype der Spalte ist int). Es scheint, Neufassung und alles, was als float, wenn wir machen dies zu einem DataFrame, aber wir würden wirklich gerne int
.
Gedanken?
Sachen ausprobiert:
Ich habe versucht mit der from_records()
Funktion unter pandas.DataFrame, mit coerce_float=False
- und dies nicht hilft. Ich habe auch versucht, mit Hilfe von NumPy maskierte arrays, mit NaN fill_value, die auch nicht funktioniert. Alle diese verursacht den Datentyp der Spalte zu einem float.
Ich werde es einmal versuchen. Ich habe auch versucht, die
from_records
Funktion unter pandas.DataFrame, mit coerce_float=False
, aber kein Glück... es macht immer noch die neuen Daten Typ float64
.Ja, kein Glück. Auch mit maskierten array, das es noch konvertiert zu schweben. Es sah aus wie Pandas geht so: "Ist es ein NaN überall? ... Dann hat alles einen Schwimmer." Hoffentlich gibt es einen Weg, um dieses.
Optional Nullable-Integer-Unterstützung ist nun offiziell Hinzugefügt pandas 0.24.0 - endlich 🙂 - finden Sie eine aktualisierte Antwort unten. pandas 0.24.x release notes
InformationsquelleAutor ely | 2012-07-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Funktion wurde Hinzugefügt, um pandas (beginnend mit version 0.24):
https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support
Zu diesem Zeitpunkt, erfordert es die Verwendung der Erweiterung "dtype" Int64 (groß), eher als die Standard-dtype int64 (Kleinbuchstaben).
'Int64'
machen, damit es funktioniert. Es wird sogar noch besser, wenn es standardmäßig aktiviert.Das ist großartig! Es gibt ein kleines Problem aber, dass PyCharm nicht anzeigen der dataframe in der debug-Fenster, wenn es so benutzt wird. Sie können sehen, meine Antwort für eine andere Frage, wie zu zwingen, die Anzeige von: stackoverflow.com/questions/38956660/... (das ursprüngliche problem es ist anders, aber die Lösung für die Anzeige der dataframe arbeitet)
InformationsquelleAutor techvslife
NaN
können nicht gelagert werden in einem integer-array. Dies ist eine bekannte Einschränkung von pandas im moment, ich warte schon für Fortschritte mit NA-Werte in NumPy (ähnlich NAs in R), aber es werden mindestens 6 Monaten bis zu einem Jahr vor NumPy bekommt diese Funktionen, wie es scheint:http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na
(Diese Funktion wurde Hinzugefügt ab version 0.24 von pandas, aber beachten Sie, erfordert es die Verwendung der Erweiterung "dtype" Int64 (groß), eher als die Standard-dtype int64 (in Kleinbuchstaben):
https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support
)
Noch keine NAN bei Integer-arrays in Numpy...
Aktualisiert link: pandas-docs.github.io/pandas-docs-travis/whatsnew/...
InformationsquelleAutor Wes McKinney
Wenn die Leistung ist nicht das wichtigste Problem, können Sie strings speichern statt.
Dann können Sie die Mischung dann mit
NaN
so viel wie Sie wollen. Wenn Sie wirklich wollen, um ganze zahlen, abhängig von der Anwendung, die Sie verwenden können-1
oder0
oder1234567890
oder einige andere gewidmet, Wert zu repräsentierenNaN
.Können Sie auch vorübergehend doppelte Spalten: Sie haben, mit Schwimmern, die andere experimentell, mit ints oder strings. Dann fügt
asserts
in jeder angemessenen Ort zu prüfen, dass die beiden synchronisiert sind. Nach genug Tests, die Sie loslassen können von den Schwimmern.InformationsquelleAutor osa
Dies ist nicht eine Lösung für alle Fälle, aber mir (genomische Koordinaten) habe ich gegriffen mit 0 als NaN
Diese zumindest für die richtige 'native' - Spalte-Typ verwendet werden, Operationen wie Subtraktion, Vergleich usw. funktionieren wie erwartet
InformationsquelleAutor pufferfish
Pandas v0.24+
Funktionalität zu unterstützen
NaN
im Ganzzahl-Serie verfügbar sein wird in v0.24 nach oben. Es gibt die Informationen auf dieser in der v0.24 "Was ist Neu" - Abschnitt, und mehr details unter Nullable-Integer-Datentyp.Pandas v0.23 und früher
Im Allgemeinen, ist es am besten, mit zu arbeiten
float
Serie, wo möglich, auch wenn die Serie Verallgemeinerung vonint
zufloat
durch Einbeziehung vonNaN
Werte. Dies ermöglicht vektorisierte NumPy-Berechnungen auf Basis von, wo sonst, Python-Ebene Schleifen würde, verarbeitet werden.Die docs tun empfehlen : "Eine Möglichkeit ist die Verwendung
dtype=object
arrays statt." Zum Beispiel:Kosmetische Gründe, z.B. die Ausgabe in eine Datei, diese kann vorzuziehen.
Pandas v0.23 und älter: hintergrund
NaN
alsfloat
. Die docs derzeit (Stand v0.23) geben Sie den Grund, warum integer-Serie sind upcasted zufloat
:Den docs auch Regeln für upcasting aufgrund
NaN
Aufnahme:InformationsquelleAutor jpp
Dies ist nun möglich, da pandas v 0.24.0
pandas 0.24.x release notes
Zitat: "Pandas gewonnen hat die Fähigkeit zu halten, integer dtypes mit fehlenden Werten.
InformationsquelleAutor mork