Eine andere mögliche Lösung für den Fall, dass die Spalte nicht nur Zeichenfolgen, sondern auch Zahlen enthält, ist die Verwendung astype(str).str.lower()
oder to_string(na_rep='')
weil eine Zahl, wenn sie keine Zeichenfolge ist, wenn sie abgesenkt wird NaN
, wird sie zurückgegeben :
import pandas as pd
import numpy as np
df=pd.DataFrame(['ONE','Two', np.nan,2],columns=['x'])
xSecureLower = df['x'].to_string(na_rep='').lower()
xLower = df['x'].str.lower()
dann haben wir:
>>> xSecureLower
0 one
1 two
2
3 2
Name: x, dtype: object
und nicht
>>> xLower
0 one
1 two
2 NaN
3 NaN
Name: x, dtype: object
bearbeiten:
Wenn Sie die NaNs nicht verlieren möchten, ist die Verwendung der Karte besser (aus @ wojciech-walczak und @ cs95 Kommentar). Sie sieht ungefähr so aus
xSecureLower = df['x'].map(lambda x: x.lower() if isinstance(x,str) else x)
str.casefold
für aggressivere Vergleiche von Faltstrings . Weitere Informationen in dieser Antwort .