Comment réduire la taille d'une colonne Python dataframe si elle a des valeurs manquantes?

Le code suivant ne fonctionne pas.

import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan],columns=['x']) 
xLower = df["x"].map(lambda x: x.lower())

Comment dois-je modifier pour obtenir xLower = ['un','deux',np.nan]? L'efficacité est importante puisque la véritable trame de données est énorme.

30
demandé sur P.Escondido 2014-03-07 12:34:49

4 réponses

Utilisez pandas méthodes de chaîne vectorisées comme dans la documentation:

ces méthodes excluent automatiquement les valeurs manquantes/NA

.str.lower() est le premier exemple;

>>> df['x'].str.lower()
0    one
1    two
2    NaN
Name: x, dtype: object
68
répondu behzad.nouri 2014-12-01 23:56:21

une autre solution possible, dans le cas où la colonne n'a pas seulement des chaînes mais aussi des nombres, est d'utiliser astype(str).str.lower() parce que sinon, étant donné qu'un nombre n'est pas une chaîne, quand il est baissé il reviendra NaN donc:

import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan,2],columns=['x']) 
xSecureLower = df['x'].astype(str).str.lower()
xLower = df['x'].str.lower()

puis nous avons:

>>> xSecureLower
0    one
1    two
2    NaN
3      2
Name: x, dtype: object

et non

>>> xLower
0    one
1    two
2    NaN
3    NaN
Name: x, dtype: object
4
répondu Mike Woodcock 2018-03-11 04:53:53

Une solution possible:

import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan],columns=['x']) 
xLower = df["x"].map(lambda x: x if type(x)!=str else x.lower())
print xLower

Et un résultat:

$ print example.py
0    one
1    two
2    NaN
Name: x, dtype: object

Pas sûr de l'efficacité.

3
répondu Wojciech Walczak 2014-03-07 08:43:32

copiez votre colonne Dataframe et appliquez simplement

df=data ['x'] newdf=df.Str.bas()

0
répondu Ch HaXam 2018-03-29 12:24:03