Я пытался объединить и суммировать 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, но это не сработало.
Не могли бы вы, ребята, посоветовать мне?
Спасибо
Вы создаете bitcoin1 и bitcoin2, меняете их тип, а затем не используете. Вы возвращаетесь и снова читаете оригиналы, не меняете их тип, а потом получаете ошибку в дополнении. Похоже, что в файлах есть некоторые проблемы с типом. Там много файлов? Следует ли вам выполнять astype для файлов, которые вы читаете в цикле for?
Теперь я добавил свое изображение ошибки. @tdelaney Да, я пытался изменить тип на плавающий. У меня есть два одинаковых файла, и я хочу создать их для автоматического Excel. Мой исходный файл находится в all_bit, но это список. Я все еще нахожу способ добавить файл типа изменения в «all_bit».
Могу ли я экспортировать файл, тип которого я изменил, в папку «all_bit» и запустить его снова?






Загруженные вами файлы 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)
Спасибо за ваш ответ, но когда я использую этот код, мой столбец «Дата» не может измениться на индекс, он отображается как числовое значение. Я хочу изменить столбец «Дата» на индекс.
Просто преобразуйте столбец даты в формат даты и времени, установите для него индекс и сделайте все остальное. Я обновлю код с учетом нового столбца.
Добавьте полное сообщение об ошибке трассировки, чтобы мы могли видеть, какая строка не удалась.