Для задания мне нужно создать список ставок в порядке дат из файла CSV. Файл выглядит следующим образом (пример):
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
Я хотел бы создать новый столбец для каждой строки, объединяющей [2],[3],[4]
в формате '%d-%b-%y'
в CSV. Затем мне нужно использовать этот новый столбец в качестве ключа для создания списка ставок [5]
в порядке дат.
У меня есть этот код ниже, будучи новичком в python, я не добился большого успеха и не уверен, где он идет не так. Выдает эту ошибку при запуске:
Traceback (most recent call last):
File "date_bet.py", line 25, in <module>
get_date()
File "date_bet.py", line 10, in get_date
data = list(csv.reader(csvFile))
io.UnsupportedOperation: not readable
Код:
import csv
from datetime import datetime
def get_date():
with open('results.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
reader = csv.reader(csvFile)
all = []
data = list(csv.reader(csvFile))
row = next(csvFile)
row.append([7])
all.append(row)
for row in data:
row.append((data[4],data[3],data[2]), '%d-%b-%y')
all.append(row)
writer.writerows(all)
date = datetime.date(row[7], '%x')
print(row[5], key = date)
get_date()
Извините, это была глупая ошибка. Когда я звоню, я получаю эту ошибку, Traceback (последний последний вызов): Файл "date_bet.py", строка 25, в <module> get_date() Файл "date_bet.py", строка 10, в get_date data = list(csv .reader(csvFile)) io.UnsupportedOperation: не читается
Джек: Пожалуйста, поместите трассировку в в свой вопрос (и добавьте отсутствующий вызов в get_date()
).
Вы открываете файл в режиме 'a'
(который не является режимом чтения), а затем пытаетесь прочитать его.
Если я открою в режиме «r», мне нужно создать csv через режим «w», а затем создать новый столбец?
Возможно, вам следует подумать об использовании панды для достижения того, чего вы хотите.
I would like to create a new column for each row combining 2,3,[4] in format '%d-%b-%y'
import pandas as pd
df = pd.read_csv(<your_file_name>, header=None)
Добавьте столбец с помощью функции pd.to_datetime
:
df['date'] = pd.to_datetime(dict(year=df[2], month=df[3], day=df[4]), format='%d-%b-%y')
df
0 1 2 3 4 5 6 date
0 Aintree Red Rum 2017 5 12 11.58 won 2017-05-12
1 Aintree Hurricane Fly 2017 5 12 11.58 won 2017-05-12
2 Aintree Murder 2017 5 12 5.00 lost 2017-05-12
3 Ayr Corbiere 2016 11 3 25.00 lost 2016-11-03
I then need to use this new column as the key to produce a list of bets [5] in date order.
df.sort_values('date', inplace=True)
print(df[[5, 'date']].reset_index(drop=True)) # reset index so that you don't see the mixedup index.
5 date
0 25.00 2016-11-03
1 11.58 2017-05-12
2 11.58 2017-05-12
3 5.00 2017-05-12
Вы можете сохранить это в csv, используя метод df.to_csv()
.
Большое спасибо, это очень полезно. Я проголосовал за ваш ответ, но в нем говорится, что моя репутация слишком низка, чтобы публично ее изменить.
Использование панд. Добавление нового столбца с именем «дата» и сортировка данных по новому столбцу.
import pandas as pd
df = pd.read_csv('55611308.csv', sep=',', names=['name0', 'name1', 'y', 'm', 'd', 'h', 'result'], header=None)
df['date'] = df['y'].astype(str).str.cat(df['m'].astype(str), sep='-').str.cat(df['d'].astype(str), sep='-')
df.sort_values('date',inplace=True)
print(df)
Похоже, вы не вызываете свою функцию
get_date
.