1. Фрейм это не однородная структура данных, то есть у тебя могут быть колонки разных типов, и если ты применяешь функцию для всего фрейма (возможно применение и для подсета фрейма), ты должен быть уверен, что она применима к этим типам данным.
2. Как следствие ты должен привести свой фрейм к такому типу данных с которым может работать твоя функция метод
astype
3. Есть три направления для применения твоей функции. Основной это метод
apply
он применяется к каждой строке или каждой колонке параметр
axis
, то есть когда ты пишешь свою кастомную функцию на вход она будет получать либо numpy массив либо pandas Series. Вообще
apply
для фрейма имеет довольно много интересных параметров почитай
доки этого метода он реально мощный.
4. Ты также можешь использовать
pipe он работает как с Series так и с фреймаим я их часто по цепочке использую очень удобно. То есть пишешь функцию где на вход тебе фрейм приходит, оперируешь так как хочешь им. И потом ориганальный фрейм
pipe(func, *args, **kwargs)
и тебе приходит копия оригинального фрейма с твоими изменениями описанными в
func
, это очень хорошая практика.
5. Ну и последнее самое простенькое это
map применяет функцию по элементно к твоему фрейму. То есть свою кастомную функцию ты пишешь, не для numpy массива, не для pandas Series, а для каждого элемента фрейма.