2013-07-17 16 views
16

Ich habe ein Dataframe df alskonvertieren Pandas Serie String mit boolean

Order Number  Status 
1   1668 Undelivered 
2  19771 Undelivered 
8 Undelivered 
4   2229 Delivered 
5  00056 Undelivered 

ich die Status Spalte umwandeln möchte, genannt boolean (True wenn Status-Lieferung und False wenn Status-Undelivered ist), aber wenn Der Status ist weder 'Nicht geliefert' noch 'Geliefert', es sollte als NotANumber oder so ähnlich betrachtet werden.

Ich mag wäre einen dict verwenden

d = { 
    'Delivered': True, 
    'Undelivered': False 
} 

so konnte ich leicht anderen Zeichenfolge hinzufügen, die entweder als True oder False in Betracht gezogen werden könnte.

Antwort

27

Sie nur map verwenden können:

In [7]: df = pd.DataFrame({'Status':['Delivered', 'Delivered', 'Undelivered', 
            'SomethingElse']}) 

In [8]: df 
Out[8]: 
      Status 
0  Delivered 
1  Delivered 
2 Undelivered 
3 SomethingElse 

In [9]: d = {'Delivered': True, 'Undelivered': False} 

In [10]: df['Status'].map(d) 
Out[10]: 
0  True 
1  True 
2 False 
3  NaN 
Name: Status, dtype: object 
+0

im bekommen 'AttributError: 'DataFrame' Objekt hat kein Attribut 'map''. –

+0

'map' ist eine Methode für die Serie, nicht DataFrame. – joris

+0

ja, hab ich, sorry dafür. –

4

Sie haben alles, was Sie brauchen. Sie werden glücklich sein replace zu entdecken:

df.replace(d) 
+0

Ah, ich sehe es nur jetzt habe ich meine Antwort geschrieben. Gibt es einen Unterschied zu "map" in diesem Fall? – joris

+0

Es scheint, dass etwas anderes (nicht in den Dift) ist nur mit 'ersetzen ', sondern umgewandelt in' NaN 'mit' map' – joris

+3

Ich denke '' map'' ist hier eine bessere Wahl, eigentlich, wenn ein Wert ist nicht in "d", dann ist der Wert ungültig und sollte durch "NaN" ersetzt werden. –

4

Ein Beispiel für replace Methode Werte in der angegebenen Spalte C2 nur zu ersetzen und als DataFrame Typ Ergebnis.

import pandas as pd 
df = pd.DataFrame({'C1':['X', 'Y', 'X', 'Y'], 'C2':['Y', 'Y', 'X', 'X']}) 

    C1 C2 
0 X Y 
1 Y Y 
2 X X 
3 Y X 

df.replace({'C2': {'X': True, 'Y': False}}) 

    C1  C2 
0 X False 
1 Y False 
2 X True 
3 Y True 
+1

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontextes hinsichtlich dessen, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. –