web-dev-qa-db-fra.com

Convertir Pandas série contenant une chaîne en booléen

J'ai un DataFrame nommé df as

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

Je voudrais convertir la colonne Status en booléen (True lorsque le statut est délivré et False lorsque le statut n'est pas livré), mais si le statut n'est ni 'Non distribué' ni 'Livré' il doit être considéré comme NotANumber ou quelque chose comme ça.

Je voudrais utiliser un dict

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

donc je pourrais facilement ajouter une autre chaîne qui pourrait être considérée comme True ou False.

28
working4coins

Vous pouvez simplement utiliser map:

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
37
joris

Un exemple de méthode replace pour remplacer les valeurs uniquement dans la colonne spécifiée C2 et obtenir le résultat sous la forme DataFrame.

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
7
Kappa Leonis

Vous avez tout ce dont vous avez besoin. Vous serez heureux de découvrir replace :

df.replace(d)
4
Dan Allan