Создание функции для записи листов Excel с использованием pandas

Вопрос или проблема

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(‘ dtype(‘

Искал в интернете, но не могу решить. Любая помощь приветствуется.

Спасибо

Прежде всего, как указано в документации pandas, метод to_excel имеет первый параметр, который принимает str или объект ExcelWriter. В вашем случае я предполагаю, что вы пытаетесь передать str. В данном случае невозможно передать name в качестве параметра, так как это не str, это pandas.DataFrame, так как присутствует:

name = name.loc[name['CT_3D'] == 1]

Я полагаю, вы пытаетесь передать имя столбца (str), фильтровать по другому (CT_3D), назначить его новому итоговому df и сохранить его. Я бы сделал следующее:

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)

Таким образом, лучше различаются имя столбца и датафрейм. И, как вы видите, необходимо конкатенировать строки col_name с расширением (.xlsx) с помощью знака +, а не разделять их запятой (так как это считается другим параметром для .to_excel).


Ответ или решение

Для создания функции, которая записывает данные DataFrame в отдельные Excel файлы с использованием библиотеки Pandas, необходимо учесть несколько важных моментов. Рассмотрим их шаг за шагом.

Шаг 1: Импорт необходимых библиотек

Начнем с импорта библиотеки pandas. Обычно для удобства ее импортируют под псевдонимом pd.

import pandas as pd

Шаг 2: Определение функции

Наша функция 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)

Шаг 3: Вызов функции в цикле

Для обработки списка вопросов, мы будем вызывать нашу функцию внутри цикла:

Questions = ["Column1", "Column2", "Column3"]  # Пример списка вопросов

for question in Questions:
    CTDataSQ(question)

Ошибки в первоначальном коде и их исправление

  1. Неверный параметр в to_excel: Раннее значением параметра name передавался DataFrame, что некорректно. Вместо этого требуется строка, представляющая имя файла, что и было исправлено при помощи формирования строки col_name + ".xlsx".

  2. Кодировка: Ошибка UFuncTypeError в вашем начале кода может возникать, если столбец содержит нечисловые данные и к ним применяется арифметическая операция. Мы избегаем этого, явно создавая условия и операции только там, где они действительно применимы.

Этот метод позволяет вам легко и эффективно создать Excel файлы для каждого элемента из списка вопросов. Убедитесь, что все имена столбцов корректны и присутствуют в DataFrame cleanDF.

Оцените материал
Добавить комментарий

Капча загружается...