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.
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
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
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é.
copiez votre colonne Dataframe et appliquez simplement
df=data ['x'] newdf=df.Str.bas()