Использовать str accessor:
df.loc[:,'a':'b'].apply(lambda x: x.str.upper())
OUtput:
a b
0 HORSE CAT
1 DOG ELEPHANT
Что здесь происходит?
Хорошо. Давайте сделаем небольшую отладку:
def f(x):
print(type(x))
print(type(x[0]))
df.loc[:,'a':'b'].apply(f)
Вывод:
<class 'pandas.core.series.Series'>
<class 'str'>
<class 'pandas.core.series.Series'>
<class 'str'>
Здесь мы используем pd.DataFrame.apply
.
В этом случае серия панд передается функции f, поэтому мы можем использовать .strаксессор для вызова строковой функции upper.
Теперь давайте рассмотрим первый случай:
def f(x):
print(type(x))
print(type(x[0]))
df.loc[:,'a'].apply(f)
Вывод:
<class 'str'>
<class 'str'>
<class 'str'>
<class 'str'>
Здесь мы используем pd.Series.apply
и передать каждое значение само.Поэтому мы можем просто вызывать строковую функцию upper непосредственно для каждого значения.
И вы также можете использовать pd.DataFrame.applymap
, так как @ chrisz показывает в его решении, чтобы передать каждое значение ячейки информационного кадра.к функции.