Как проверить ячейки на наличие чисел и вывести их суммы?
Имеется файл формата .xlsx.
Задача: вычислить сумму чисел, заключенных в данном столбце
Проблема: при наличии в столбце чего-то кроме числа, подсчет невозможен
Не могу понять, как можно поставить проверку ячейки на наличие числа?
Что уже есть:
import openpyxl
rb = openpyxl.load_workbook('/путь_к_файлу/TestData.xlsx')
sheet = rb['Sheet1']
len_var = column_len(sheet,4)
cell = 0
# Пробег по всему столбцу
for i in range(1,len(sheet['C'])):
# Если в ячейке число, то закидывать его в сумму
if (sheet.cell(row = i, column = 3).?????): # Как поставить проверку на наличие в ячейке числа?
cell+= float(sheet.cell(row = i, column = 3).value) # Суммируем числа в ячейках третьего столбца
print (cell)
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь модулем Pandas - он сделает за вас всю "грязную" работу:
import pandas as pd # pip install pandas | conda install pandas
filename = "/Downloads/TestData.xlsx"
# читаем/парсим Excel файл в Pandas.DataFrame
df = pd.read_excel(filename)
# df.iloc[:, 2] - выбираем третий столбец по индексу (индексация начинается с нуля)
# функция `pd.to_numeric(column, errors="coerce")` пытается преобразовать все значения столбца в числа,
# если это невозможно заменяет значения на `NaN` (Not a Number)
res = pd.to_numeric(df.iloc[:, 2], errors="coerce").sum()
print(f"Сумма значений столбца 2 (нумерация начинается с нуля): {res}")
вывод:
Сумма значений столбца 2 (нумерация начинается с нуля): 16.75
PS функция pd.read_excel() по умолчанию ожидает в первой строке Excel файла наименования столбцов и в таком случае к столбцам DataFrame удобнее обращаться по имени - df["column_name"]
Автор решения: Vadim.Sharoikin
→ Ссылка
с вашим же кодом используя isinstance
import openpyxl
rb = openpyxl.load_workbook('TestData.xlsx')
sheet = rb['Sheet1']
cell = 0
for i in range(1,len(sheet['C'])+1):
if isinstance(sheet.cell(row = i, column = 3).value,(float, int)): # проверка на тип int/float
cell+= sheet.cell(row = i, column = 3).value # Суммируем числа в ячейках третьего столбца
print (cell)
или просто try/except
import openpyxl
rb = openpyxl.load_workbook('TestData.xlsx')
sheet = rb['Sheet1']
cell = 0
for i in range(1,len(sheet['C'])+1):
try :
cell+= float(sheet.cell(row = i, column = 3).value)
except:
pass
print(cell)