Вопрос или проблема
def CTDataSQ (name):
name= cleanDF[[“PatientstudyId2″,”RATER”,”CT_3D”,name]]
name= name.loc[name[‘CT_3D’] == 1]
del name[“CT_3D”]
name.to_excel(name, “.xlsx”)
for y in Questions:
CTDataSQ(y)
Я пытаюсь создать функцию, которая создает выходные файлы Excel с названиями, которые берутся из списка. Я получаю следующую ошибку.
UFuncTypeError: ufunc ‘add’ did not contain a loop with signature matching types (dtype(‘ Искал в интернете, но не могу решить. Любая помощь приветствуется. Спасибо Прежде всего, как указано в документации pandas, метод Я полагаю, вы пытаетесь передать имя столбца (str), фильтровать по другому (CT_3D), назначить его новому итоговому df и сохранить его. Я бы сделал следующее: Таким образом, лучше различаются имя столбца и датафрейм. И, как вы видите, необходимо конкатенировать строки col_name с расширением (.xlsx) с помощью знака Для создания функции, которая записывает данные DataFrame в отдельные Excel файлы с использованием библиотеки Pandas, необходимо учесть несколько важных моментов. Рассмотрим их шаг за шагом. Шаг 1: Импорт необходимых библиотек Начнем с импорта библиотеки pandas. Обычно для удобства ее импортируют под псевдонимом Шаг 2: Определение функции Наша функция Шаг 3: Вызов функции в цикле Для обработки списка вопросов, мы будем вызывать нашу функцию внутри цикла: Ошибки в первоначальном коде и их исправление Неверный параметр в Кодировка: Ошибка UFuncTypeError в вашем начале кода может возникать, если столбец содержит нечисловые данные и к ним применяется арифметическая операция. Мы избегаем этого, явно создавая условия и операции только там, где они действительно применимы. Этот метод позволяет вам легко и эффективно создать Excel файлы для каждого элемента из списка вопросов. Убедитесь, что все имена столбцов корректны и присутствуют в DataFrame to_excel
имеет первый параметр, который принимает str
или объект ExcelWriter. В вашем случае я предполагаю, что вы пытаетесь передать str
. В данном случае невозможно передать name
в качестве параметра, так как это не str
, это pandas.DataFrame
, так как присутствует:name = name.loc[name['CT_3D'] == 1]
def CTDataSQ (col_name):
final_df= cleanDF[["PatientstudyId2","RATER","CT_3D",col_name]]
final_df= final_df.loc[final_df['CT_3D'] == 1]
del final_df["CT_3D"]
final_df.to_excel(col_name + ".xlsx")
for y in Questions:
CTDataSQ(y)
+
, а не разделять их запятой (так как это считается другим параметром для .to_excel).
Ответ или решение
pd
.import pandas as pd
CTDataSQ
будет принимать в качестве аргумента имя столбца данных, которое мы должны использовать для фильтрации таблицы. После фильтрации данные сохраняются в Excel файл. Вот обновленная версия функции:def CTDataSQ(col_name):
# Создаем DataFrame с необходимыми столбцами
df = cleanDF[["PatientstudyId2", "RATER", "CT_3D", col_name]]
# Фильтруем данные по условию `CT_3D == 1`
df_filtered = df.loc[df['CT_3D'] == 1]
# Удаляем столбец `CT_3D`, который больше не нужен
del df_filtered["CT_3D"]
# Создаем имя файла, добавляя расширение .xlsx
file_name = f"{col_name}.xlsx"
# Записываем DataFrame в Excel файл
df_filtered.to_excel(file_name, index=False)
Questions = ["Column1", "Column2", "Column3"] # Пример списка вопросов
for question in Questions:
CTDataSQ(question)
to_excel
: Раннее значением параметра name
передавался DataFrame, что некорректно. Вместо этого требуется строка, представляющая имя файла, что и было исправлено при помощи формирования строки col_name + ".xlsx"
.cleanDF
.