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 devrais-je le modifier pour obtenir xLower = ['un', 'deux', np.nan]? L'efficacité est importante car le cadre de données réel est énorme.
utilisez des pandas méthodes de chaîne vectorisées ; comme dans la documentation:
ces méthodes excluent automatiquement les valeurs manquantes/NA
.str.lower()
en est le tout 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 contient non seulement des chaînes, mais aussi des nombres, consiste à utiliser astype(str).str.lower()
car sinon, étant donné qu'un nombre n'est pas une chaîne, une fois abaissé, il retournera NaN
.
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()
ensuite nous avons:
>>> xSecureLower
0 one
1 two
2 NaN
3 2
Name: x, dtype: object
et pas
>>> 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é si.
vous pouvez aussi essayer celui-ci,
df= df.applymap(lambda s:s.lower() if type(s) == str else s)
copiez votre colonne Dataframe et appliquez simplement
df = données ['x'] newdf = df.str.lower ()