Іншим можливим рішенням, якщо стовпець має не лише рядки, а й числа, є використання astype(str).str.lower()
або to_string(na_rep='')
тому, що інакше, враховуючи, що число не є рядком, при опусканні воно повернеться NaN
, отже:
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()
тоді маємо:
>>> xSecureLower
0 one
1 two
2
3 2
Name: x, dtype: object
і ні
>>> xLower
0 one
1 two
2 NaN
3 NaN
Name: x, dtype: object
редагувати:
якщо ви не хочете втратити NaN, то використання карти буде краще, (з @ wojciech-walczak та @ cs95 коментар) це буде виглядати приблизно так
xSecureLower = df['x'].map(lambda x: x.lower() if isinstance(x,str) else x)
str.casefold
для більш агресивного порівняння рядків, що складаються. Більше інформації у цій відповіді .