Используйте список с именами функций для итеративного применения к столбцу фрейма данных

Контекст: я разрешаю пользователю добавлять определенные методы для конвейера процесса очистки (добавляется к основному списку со всеми выбранными методами). Каждый элемент из этого списка является именем функции.

Мой вопрос:

Почему это работает:

dataframe[cleanedCol] =dataframe[colToClean].apply(replace_contractions).apply(remove_links).apply(remove_emails)

А что-то вроде этого нет?

pipeline = ['replace_contractions','remove_links','remove_emails']
for method in pipeline:
     dataframe[cleanedColumn] = dataframe[columnToClean].apply(method)

Как я могу итеративно применить каждый из методов из списка (по порядку их расположения в списке) к столбцу фрейма данных?

Заранее спасибо!

Можете ли вы сказать нам, в чем разница между replace_contractions и 'replace_contractions'? Каковы типы обоих этих выражений? Если вы просто делаете один .apply(), будет ли dataframe[colToClean].apply('replace_contractions') работать? Почему нет?

Pranav Hosangadi 13.05.2022 17:50

Во втором примере у вас есть список строк, а не список переменных. Вот почему он возвращает ошибку, когда вы передаете его в метод применения.

Kevin Choon Liang Yew 13.05.2022 17:50
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно либо преобразовать эти строки в фактические функциональные объекты, либо, что еще лучше, просто хранить объекты функций вместо имен в виде строк.

pipeline = [replace_contractions, remove_links, remove_emails]
for method in pipeline:
     dataframe[cleanedColumn] = dataframe[columnToClean].apply(method)

Это был мой плохой, совсем забыл об этом! Я использовал словарь как способ сопоставления ключей как «имени функции» и значений как «выбранных параметров» {function: 1}, etc и забыл, что я должен использовать объекты функции вместо строк! Спасибо!

ROO 13.05.2022 18:00

Другие вопросы по теме