Суммирование столбца в файле .csv с помощью python

#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, поэтому я действительно ценю вашу помощь.