#python #csv
#python #csv
Вопрос:
Я пытаюсь суммировать столбец в файле csv с помощью python. Вот пример данных csv;
Date,Profit/Losses
Jan-2010,867884
Feb-2010,984655
Mar-2010,322013
Apr-2010,-69417
May-2010,310503
Jun-2010,522857
Jul-2010,1033096
Aug-2010,604885
Sep-2010,-216386
Я хочу суммировать столбец прибыли / убытков.
Я использую следующий код, но он возвращает 0. Где я мог ошибиться?
import os
import csv
# Path to collect data from the csv file in the Resources folder
pybank_csv = os.path.join("resources", "budget_data.csv")
with open(pybank_csv, 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
next(csvfile, None)
t = sum(float(row[1]) for row in csvreader)
#print the results
print(f"Total: {t}")
Комментарии:
1. Код, кажется, в полном порядке. Пожалуйста, убедитесь, что вы открываете правильный файл и что столбец «Прибыль / убытки» в действительности не суммируется с 0 (например, оставив в нем всего несколько первых строк)
2. @fdermishin спасибо за это. Я открываю правильный файл, и общее количество столбцов в файле CSV не равно 0.
3. Я запустил код в предоставленном вами примере и получил результат
Total: 4360090.0
4. Я добавил этот код ‘row_count = sum (1 для строки в csvreader)’, и он возвращает ‘9’, поэтому я знаю, что он читает правильный файл, но я все равно получаю 0
5. о, да, это может быть то, где я ошибаюсь. Я читал количество строк, а затем пытался суммировать, используя csvreader ‘code’.
Ответ №1:
Самый простой способ — использовать библиотеку pandas.
Используется pip install pandas
для установки pandas на вашем компьютере
и затем
import pandas as pd
df = pd.read_csv('your_filename.csv')
sumcol = df['Profit/Losses'].sum()
print(sumcol)
Теперь сумма находится в объекте sumcol. Для дальнейшего использования, если ваша задача — работать с данными, представленными в файле csv, pandas — это благословение. Эта библиотека предоставляет вам тысячи различных типов операций, которые вы можете выполнять с вашими данными. Для получения дополнительной информации обратитесь к веб-сайту Pandas.
Если вы хотите использовать только пакет csv, вы можете прочитать csv как dict, а затем суммировать запись прибыли / убытка dict для каждой строки
total = 0
with open('your_filename.csv', newline='') as csvfile:
data = csv.DictReader(csvfile)
for row in data:
total = total int(row['Profit/Losses'])
print(total)
Или, если вы хотите использовать reader вместо dict reader, вам нужно игнорировать первую строку. Что-то вроде этого
total = 0
with open('your_filename.csv', newline='') as csvfile:
data = csv.reader(csvfile)
for row in data:
if not str(row[1]).startswith('P'):
total = total int(row[1])
print(total)
Комментарии:
1. Спасибо за это. Это для назначения класса, и преподаватель пока не хочет, чтобы мы использовали pandas. Это на следующей неделе. Просто интересно, почему код возвращает 0
2. Я протестировал свой код, и sumcol печатает 4360090, как и должно быть. Также я отредактирую свой ответ, чтобы учесть код «только для библиотеки csv»
3. Спасибо за помощь. Теперь это работает. Я новичок в python, а также в stackoverflow, поэтому я действительно ценю вашу помощь.