Как устранить «Неподдерживаемые типы операндов для +: ошибка 'float' и 'str'»?

Я пытался объединить и суммировать 2 Excel с помощью Python, но когда я использовал «цикл for», я обнаружил ошибку «неподдерживаемый тип операнда для +: 'float' и 'str'».

Смотрите мой код ниже:

import pandas as pd
import os

os.getcwd() + '/projects'

all_bit = os.listdir(os.getcwd() + '/projects/Python_excel/Test_files')

#Read Excel Bitcoin 1
bitcoin1 = pd.read_excel(os.getcwd() + '/projects/Python_excel/Test_files/' + all_bit[0])

#Check file
all_bit[0]

#Change data types
bitcoin1["Latest"] = bitcoin1["Latest"].astype(int)
bitcoin1["Open"] = bitcoin1["Open"].astype(int)
bitcoin1["Highest"] = bitcoin1["Highest"].astype(int)
bitcoin1["Lowest"] = bitcoin1["Lowest"].astype(int)

#Drop unnecessary column
bitcoin1 = bitcoin1.drop(['%Change','Amount'], axis = 1, inplace = False)

#Read Excel Bitcoin 2
bitcoin2 = pd.read_excel(os.getcwd() + '/projects/Python_excel/Test_files/' + all_bit[1])

#Change data types
bitcoin2["Latest"] = bitcoin2["Latest"].astype(int)
bitcoin2["Open"] = bitcoin2["Open"].astype(int)
bitcoin2["Highest"] = bitcoin2["Highest"].astype(int)
bitcoin2["Lowest"] = bitcoin2["Lowest"].astype(int)

#Drop unnecessary column
bitcoin2 = bitcoin2.drop(['%Change','Amount'], axis = 1, inplace = False)

#Loop
rep = pd.DataFrame()
for bitcoin in all_bit:
    data_bit = pd.read_excel(os.getcwd() + '/projects/Python_excel/Test_files/' + bitcoin)
    rep = rep.add(data_bit.set_index('Date'),fill_value=0)

Моя картинка ошибки

После того, как я закончил цикл for, он показал: «TypeError: неподдерживаемые типы операндов для +: 'float' и 'str'». Я попытался изменить float на int, но это не сработало.

Не могли бы вы, ребята, посоветовать мне?

Спасибо

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

tdelaney 10.05.2024 18:01

Вы создаете bitcoin1 и bitcoin2, меняете их тип, а затем не используете. Вы возвращаетесь и снова читаете оригиналы, не меняете их тип, а потом получаете ошибку в дополнении. Похоже, что в файлах есть некоторые проблемы с типом. Там много файлов? Следует ли вам выполнять astype для файлов, которые вы читаете в цикле for?

tdelaney 10.05.2024 18:07

Теперь я добавил свое изображение ошибки. @tdelaney Да, я пытался изменить тип на плавающий. У меня есть два одинаковых файла, и я хочу создать их для автоматического Excel. Мой исходный файл находится в all_bit, но это список. Я все еще нахожу способ добавить файл типа изменения в «all_bit».

Spatdy 10.05.2024 18:17

Могу ли я экспортировать файл, тип которого я изменил, в папку «all_bit» и запустить его снова?

Spatdy 10.05.2024 18:43
Почему в 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
5
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Загруженные вами файлы Excel имеют значения столбцов в строковом формате, а их длина различна. Метод df.add() выполняет суммирование по элементам, а «fill_value=0» означает, что если их длина не совпадает, заполните конец более короткого df значением 0,0, чтобы их длина совпадала. Вот почему вы получаете ошибку при добавлении str к float.

Вам нужно сначала изменить значения на числовые, а затем добавить числа, но Биткойн{1,2} ничего для вас не делает, так как вы не используете их позже.

Вот код, который выполнит эту задачу за вас:

import pandas as pd
import os

directory = os.getcwd() + '/projects/Python_excel/Test_files/'
result_df = pd.DataFrame()

for file_name in os.listdir(directory):
    df = pd.read_excel(os.path.join(directory, file_name))

    # Convert 'Date' column to datetime and set it as index
    df['Date'] = pd.to_datetime(df['Date'])
    df.set_index('Date', inplace=True)

    df = df.apply(pd.to_numeric, errors='ignore').drop(columns=["%Change", "Amount"], errors='ignore')
    result_df = result_df.add(df, fill_value=0)

print(result_df)

Спасибо за ваш ответ, но когда я использую этот код, мой столбец «Дата» не может измениться на индекс, он отображается как числовое значение. Я хочу изменить столбец «Дата» на индекс.

Spatdy 11.05.2024 06:09

Просто преобразуйте столбец даты в формат даты и времени, установите для него индекс и сделайте все остальное. Я обновлю код с учетом нового столбца.

Milad Shani 11.05.2024 10:38

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

Как работает прогноз для упорядоченной логит-регрессии?
Могу ли я оптимизировать этот код pandas, привязанный к процессору, с помощью поляров?
Создайте новые столбцы в фрейме данных со значениями из других столбцов в зависимости от условия
Панды в каждой n-й строке из каждой группы
Сохраняйте столбцы и строки, содержащие «FAIL», в фрейме данных pandas
При приеме данных из CSV в XLSX через Pandas и XLSXwriter возникает ошибка отображения чисел в виде текста
Pandas отображает несколько столбцов с помощью фильтра
Как мне извлечь из xml значение «xml:id» в Python, используя ElementTree, в фрейм данных?
Выбор значений экстремальных температур из столбца фрейма данных pandas, где процесс выбора включает в себя несколько усложняющих условий
Использование pandas read_excel с определенной точностью с плавающей запятой, когда текст присутствует в столбцах/строках данных