Используя модуль datetime в python мне нужно отсортировать столбец суммы в порядке дат - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть небольшой CSV-файл, который отслеживает ставки, мне нужно производить ставки в порядке дат по запросу пользователя. Пример csv показан ниже, год = [2], месяц = ​​[3], день = [4]: ​​

Aintree, Red Rum,2017,5,12,11.58, won
Aintree, Hurricane Fly,2017,5,12,11.58, won
Aintree, Murder,2017,5,12,5, lost 
Ayr, Corbiere,2016,11,3,25, lost

(ставки = [5])

Я нашел способ присоединиться к столбцу дат, но не могу отсортировать его по порядку дат.

Для домашнего задания я не могу использовать Панд. Пожалуйста, вы можете помочь мне разобраться с вопросом преобразования новой строки в дату. Заранее спасибо.

import csv
from datetime import datetime

def get_date():

    result=[]

    with open('results.csv', 'r') as csvFilein:
        reader = csv.reader(csvFilein)
        with open('resultscopy.csv', 'w') as csvFileout:
            writer = csv.writer(csvFileout)


            rows = []
            all = []

            for rows in reader:
                new_row = [''.join([rows[2], rows[3], rows[4]])] + rows[7:]
                writer.writerows(all)
                rows.append(all)
                all.append(rows)
                date = datetime.strptime(' 2017 01 11', '%Y %m %d')
                result = str(new_row) + str(rows[5])

                print(date)

            csvFilein.close()

get_date()

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете преобразовать даты в datetime.datetime объекты, а затем отсортировать, используя объект datetime в качестве ключа:

import datetime, csv
data = [[*i[:2], datetime.datetime(*map(int, i[2:5])), *i[5:]] for i in csv.reader(open('test_csv.csv'))]
result = sorted(data, key=lambda x:x[2])

Вывод:

[['Ayr', ' Corbiere', datetime.datetime(2016, 11, 3, 0, 0), '25', ' lost'], ['Aintree', ' Red Rum', datetime.datetime(2017, 5, 12, 0, 0), '11.58', ' won'], ['Aintree', ' Hurricane Fly', datetime.datetime(2017, 5, 12, 0, 0), '11.58', ' won'], ['Aintree', ' Murder', datetime.datetime(2017, 5, 12, 0, 0), '5', ' lost']]

Правка: получениедата и сумма:

new_data = [i[2:-1] for i in result]

Вывод:

[[datetime.datetime(2016, 11, 3, 0, 0), '25'], [datetime.datetime(2017, 5, 12, 0, 0), '11.58'], [datetime.datetime(2017, 5, 12, 0, 0), '11.58'], [datetime.datetime(2017, 5, 12, 0, 0), '5']]

Редактировать 1: форматирование результата datetime в виде строки:

new_result = [[f'{a.day}/{a.month}/{a.year}', b] for a, b in new_data]

Вывод:

[['3/11/2016', '25'], ['12/5/2017', '11.58'], ['12/5/2017', '11.58'], ['12/5/2017', '5']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...