Разбор csv в python

Я пытаюсь разобрать файл csv в python и печатать сумму order_total за каждый день. Ниже приведен пример csv-файла

  order_total created_datetime 24.99 2015-06-01 00:00:12 0 2015-06-01 00:03:15 164.45 2015-06-01 00:04:05 24.99 2015-06-01 00:08:01 0 2015-06-01 00:08:23 46.73 2015-06-01 00:08:51 0 2015-06-01 00:08:58 47.73 2015-06-02 00:00:25 101.74 2015-06-02 00:04:11 119.99 2015-06-02 00:04:35 38.59 2015-06-02 00:05:26 73.47 2015-06-02 00:06:50 34.24 2015-06-02 00:07:36 27.24 2015-06-03 00:01:40 82.2 2015-06-03 00:12:21 23.48 2015-06-03 00:12:35 

Моя цель здесь – напечатать sum(order_total) за каждый день. Например, результат должен быть

 2015-06-01 -> 261.16 2015-06-02 -> 415.75 2015-06-03 -> 132.92 

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

 def sum_orders_test(self,start_date,end_date): initial_date = datetime.date(int(start_date.split('-')[0]),int(start_date.split('-')[1]),int(start_date.split('-')[2])) final_date = datetime.date(int(end_date.split('-')[0]),int(end_date.split('-')[1]),int(end_date.split('-')[2])) day = datetime.timedelta(days=1) with open("file1.csv", 'r') as data_file: next(data_file) reader = csv.reader(data_file, delimiter=',') if initial_date <= final_date: for row in reader: if str(initial_date) in row[1]: print 'initial_date : ' + str(initial_date) print 'Date : ' + row[1] else: print 'Else' initial_date = initial_date + day 

основанный на моей текущей логике, я сталкиваюсь с этой проблемой –

  1. Как вы можете видеть в примере csv есть 7 строк для 2015-06-01 , 6 строк для 2015-06-02 и 3 строки для 2015-06-03 .
  2. Мой вывод выше кода печатает 7 значений для 2015-06-01 , 5 для 2015-06-02 и 2 для 2015-06-03

Вызов функции с использованием sum_orders_test('2015-06-01','2015-06-03');

Я знаю, что есть какая-то глупая логическая проблема, но, будучи новичком в программировании и python, я не могу понять это.

3 Solutions collect form web for “Разбор csv в python”

Я перечитал вопрос, и если ваши данные действительно разделены на вкладку, вот следующий источник для выполнения задания (с использованием pandas ):

 import pandas as pd df = pd.DataFrame(pd.read_csv('file.csv', names=['order_total', 'created_datetime'], sep='\t')) df['created_datetime'] = pd.to_datetime(df.created_datetime).dt.date df = df.groupby(['created_datetime']).sum() print(df) 

Дает следующий результат:

  order_total created_datetime 2015-06-01 261.16 2015-06-02 415.76 2015-06-03 132.92 

Меньше кодов и, вероятно, более низкая сложность алгоритма.

Это нужно делать.

Модуль csv имеет DictReader , в котором вы можете включать DictReader , поэтому вместо доступа к столбцам по index ( row[0] ) вы можете предопределять имена колонок ( row['date'] ).

 from datetime import datetime, timedelta from collections import defaultdict def sum_orders_test(self, start_date, end_date): FIELDNAMES = ['orders', 'date'] sum_of_orders = defaultdict(int) initial_date = datetime.strptime(start_date, '%Y-%m-%d').date() final_date = datetime.strptime(end_date, '%Y-%m-%d').date() day = timedelta(days=1) with open("file1.csv", 'r') as data_file: next(data_file) # Skip the headers reader = csv.DictReader(data_file, fieldnames=FIELDNAMES) if initial_date <= final_date: for row in reader: if str(initial_date) in row['date']: sum_of_orders[str(initial_date)] += int(row['orders']) else: initial_date += day return sum_of_orders 

У вас может быть расширение .csv , но ваш файл, по-видимому, является файлом, tab separated .

Вы можете загрузить его как pandas dataframe но указав разделитель.

 import pandas as pd data = pd.read_csv('file.csv', sep='\t') 

Затем разделите столбец datetime на дату и время

 data = pd.DataFrame(data.created_datetime.str.split(' ',1).tolist(), columns = ['date','time']) 

Затем для каждой уникальной даты вычисляем ее order_total

 for i in data.date.unique(): print i, data[data['date'] == i].order_total.sum() 
  • Добавить заголовок для CSV-файла?
  • Создайте и загрузите CSV-файл из окна Flask
  • Поиск отсутствующих данных в Timesstamp
  • Преобразование CSV в JSON (в определенном формате) с использованием Python
  • NumPy genfromtxt: правильно использовать fill_missing
  • Как сохранить имена столбцов, начинающиеся с минуса при использовании numpy.genfromtxt?
  • Поток больших обучающих и тестовых файлов в DNNClassifier от Tensorflow
  • Ошибка модуля csv python
  • Python - лучший язык программирования в мире.