В Pandas вы можете столкнуться с ситуациями, когда вам нужно создать несколько новых столбцов на основе пользовательской функции, примененной к существующий столбец. Задача может показаться простой, но могут возникнуть неожиданные проблемы из-за ожидаемого типа возвращаемого значения функции.
Первоначально вы можете попытаться присвоить выходные данные функцию непосредственно для диапазона индексов в DataFrame, используя синтаксис df.ix[:,10:16] = df.textcol.map(extract_text_features). Однако этот подход часто может приводить к ошибкам из-за несовместимого типа возвращаемого значения функции.
Одним из возможных решений является перебор каждой строки DataFrame с использованием df.iterrows( ). Этот метод позволяет применять функцию к каждой строке индивидуально и фиксировать результаты в виде кортежа. Однако этот подход может быть значительно медленнее, чем другие варианты.
Более эффективный и гибкий подход — использовать функцию zip() в сочетании с картой() для создания новые колонки. Функция zip() объединяет выходные данные функции в кортеж, который затем можно распаковать в отдельные столбцы. Например, следующий код демонстрирует, как создать шесть новых столбцов с помощью метода zip():
df['p1'], df['p2'], df['p3'], df['p4'], df['p5'], df['p6'] = zip(*df['num'].map(powers))
Недавние обновления Pandas представили более удобные методы применения функций к столбцам и создания новых столбцов. Например, метод df.apply() позволяет указать формат вывода (DataFrame, Series или список) и обрабатывать дополнительные параметры. Кроме того, метод df.assign() позволяет создавать новые столбцы напрямую, без явного назначения выходных данных. Эти новые методы обеспечивают большую гибкость и эффективность при создании нескольких новых столбцов на основе функции.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3