Другое возможное решение, если в столбце есть не только строки, но и числа, - использовать 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
для более агрессивных сравнений строк сворачивания регистра. Больше информации в этом ответе .