Wie erstelle ich Werte mit Keine im Pandas-Datenrahmen in Python?

Gibt es irgendeine Methode, um Werte mit None in Pandas in Python zu ersetzen?

Du kannst df.replace('pre', 'post') und kannst einen Wert durch einen anderen ersetzen, aber das kann nicht getan werden, wenn man mit None Wert ersetzen möchte, was man wenn man versucht, ein seltsames Ergebnis zu bekommen.

Also hier ist ein Beispiel:

 df = DataFrame(['-',3,2,5,1,-5,-1,'-',9]) df.replace('-', 0) 

Die ein erfolgreiches Ergebnis zurückgibt.

Aber,

 df.replace('-', None) 

Die ein folgendes Ergebnis zurückgibt:

 0 0 - // this isn't replaced 1 3 2 2 3 5 4 1 5 -5 6 -1 7 -1 // this is changed to `-1`... 8 9 

Warum wird ein so seltsames Ergebnis zurückgegeben?

Da ich diesen Datenrahmen in die MySQL-Datenbank gießen möchte, kann ich keine NaN Werte in jedes Element in meinem Datenrahmen setzen und stattdessen None setzen. Sicherlich kannst du zuerst '-' zu NaN wechseln und dann NaN zu None umwandeln, aber ich möchte wissen, warum das Dataframe so schrecklich wirkt.

  • Beschleunigt Millionen von Regex-Ersatz in Python 3
  • Was ist der beste Weg, um zu finden und zu ersetzen von mehreren Abfragen auf mehrere Dateien?
  • PHP-Äquivalent von Pythons "Str.format" -Methode?
  • Python ersetzt mehrere Strings
  • Pandas Python Regex: Fehler: nichts zu wiederholen
  • Suchen Sie nach einer Zeile, die einen Text enthält, ersetzen Sie komplette Zeilenpythonschlange
  • 2 Solutions collect form web for “Wie erstelle ich Werte mit Keine im Pandas-Datenrahmen in Python?”

    Tatsächlich gibt es in späteren Versionen von Pandas einen TypeError:

     df.replace('-', None) TypeError: If "to_replace" and "value" are both None then regex must be a mapping 

    Sie können es tun, indem Sie entweder eine Liste oder ein Wörterbuch:

     In [11]: df.replace('-', df.replace(['-'], [None]) # or .replace('-', {0: None}) Out[11]: 0 0 None 1 3 2 2 3 5 4 1 5 -5 6 -1 7 None 8 9 

    Aber ich empfehle mit NaNs anstatt ohne:

     In [12]: df.replace('-', np.nan) Out[12]: 0 0 NaN 1 3 2 2 3 5 4 1 5 -5 6 -1 7 NaN 8 9 

    where ist wohl was du suchst Damit

     data=data.where(data=='-', None) 

    Von den panda docs :

    where ein Objekt mit der gleichen Form wie das Selbst zurückkehrt und dessen entsprechende Einträge von selbst sind, wo cond wahr ist und sonst von anderen ist).

    Python ist die beste Programmiersprache der Welt.