Python 如何使用现有数据在CSV文件中创建新列,然后将其用作打印排序列表的键
对于作业,我需要从CSV文件中按日期顺序生成赌注列表。文件如下(示例):Python 如何使用现有数据在CSV文件中创建新列,然后将其用作打印排序列表的键,python,csv,Python,Csv,对于作业,我需要从CSV文件中按日期顺序生成赌注列表。文件如下(示例): Aintree,红朗姆酒,2017,5,12,11.58,韩元 安特里,飓风飞行,2017,5,12,11.58,韩元 安特里,谋杀案,2017,5,12,5,失踪 艾尔,科比埃,2016,11,3,25,丢失 我想为CSV中的每一行创建一个新列,将[2]、[3]、[4]组合为'%d-%b-%y'。然后,我需要使用这个新列作为键来生成按日期顺序排列的赌注列表[5] 我在下面有这段代码,作为python的新手,我没有取得太
Aintree,红朗姆酒,2017,5,12,11.58,韩元
安特里,飓风飞行,2017,5,12,11.58,韩元
安特里,谋杀案,2017,5,12,5,失踪
艾尔,科比埃,2016,11,3,25,丢失
我想为CSV中的每一行创建一个新列,将[2]、[3]、[4]
组合为'%d-%b-%y'
。然后,我需要使用这个新列作为键来生成按日期顺序排列的赌注列表[5]
我在下面有这段代码,作为python的新手,我没有取得太多成功,也不确定哪里出了问题。运行时会产生以下错误:
回溯(最近一次呼叫最后一次):
文件“date_bet.py”,第25行,在
获取日期()
文件“date\u bet.py”,第10行,在get\u date中
数据=列表(csv.reader(csvFile))
io.UnsupportedOperation:不可读
代码:
也许你应该考虑用它来达到你想要的。< /P> 我想为每一行组合,[4]创建一个新列,格式为“%d-%b-%y” 然后,我需要使用这个新列作为键,以按日期顺序生成赌注列表[5]
您可以使用方法将其保存到csv。使用pandas。添加名为“date”的新列,并按新列对数据进行排序
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\u date
函数。很抱歉,这是一个愚蠢的错误。当我调用我得到这个错误时,回溯(最后一次调用):文件“date\u bet.py”,第25行,在get\u date()文件“date\u bet.py”,第10行,在get\u date data=list(csv.reader(csvFile))io中。不支持操作:不可读杰克:请在您的问题中回溯(并将缺少的调用添加到get\u date()
)。您正在以模式'a'
(不是读取模式)打开文件,然后尝试从中读取。如果我以模式'r'打开文件,是否需要通过模式'w'创建csv的一部分,然后才能创建新列?非常感谢,这非常有帮助。我对你的答案投了票,但它说我的声誉太低,无法公开改变它。
import pandas as pd
df = pd.read_csv(<your_file_name>, header=None)
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
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
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)