Python,制作3个带日期的列表
我需要一些帮助来制作CSV文件列表: 现在,我导入了一个文件并列出了两个列表。我的代码在这里: 列表Python,制作3个带日期的列表,python,python-2.7,csv,Python,Python 2.7,Csv,我需要一些帮助来制作CSV文件列表: 现在,我导入了一个文件并列出了两个列表。我的代码在这里: 列表周,包含所有周,日期取自行[0] 列表weight=[]包含行[1]中的所有权重 到目前为止,您在这里看到的我的代码: import csv import datetime import matplotlib.pyplot as plt from pprint import pprint #Open Data/File data1 = open('wloss.csv', 'r') reader1
周
,包含所有周,日期取自行[0]
列表weight=[]
包含行[1]
中的所有权重
到目前为止,您在这里看到的我的代码:
import csv
import datetime
import matplotlib.pyplot as plt
from pprint import pprint
#Open Data/File
data1 = open('wloss.csv', 'r')
reader1 = csv.reader(data1, delimiter=',')
week = []
weight = []
dateTime = []
week_year_2011 = []
week_year_2012 = []
week_year_2013 = []
weight_year_2011 = []
weight_year_2012 = []
weight_year_2013 = []
for row in reader1:
if row[0] != 'week':
week.append(row[0][:-13])
if row[1] != 'weight loss':
weight.append(row[1])
for item in week:
dateTime.append(datetime.datetime.strptime(item, '%Y-%m-%d'))
我得到的周列表也是从2004年到2014年
这样(您只能看到2005年的数据):
我知道2011年的第一个日期和最后一个日期是:
datetime.datetime(2011, 1, 2, 0, 0),
datetime.datetime(2011, 12, 25, 0, 0),
如何将2011年、2012年和2013年的datetime
数据放入3个新列表中,就像我在这里已经定义的那样:
week_year_2011 = []
week_year_2012 = []
week_year_2013 = []
应该为语句或其他什么做一个
另外,我如何从2011年、2012年、2013年获得正确的权重,并将其放入以下3个列表中:
weight_year_2011 = []
weight_year_2012 = []
weight_year_2013 = []
我必须用2011年、2012年和2013年的数据绘制3个图(1个图表)。
希望有人能帮助我制作这些新的列表,并将正确的数据放入其中。我会使用字典按日期对数据进行分组
您似乎有一个头在第一行的CSV文件。下面是一个更简单的版本,它按日期将数据拆分为单独的列表:
import csv
import datetime
by_year = {}
with open('wloss.csv', 'rb') as data1:
reader = csv.reader(data1)
next(reader, None) # skip first row with headers
for week, weight_loss in reader:
date = datetime.datetime.strptime(week, '%Y-%m-%d').date()
by_year.setdefault(date.year, []).append((week, weight_loss))
这建立了一个以年份为基础的字典,每个值都是一个(日期,体重减轻)
元组列表。我还建议使用dict。当然,你可以使用defaultdict(列表)
来避免设置默认值。@JohnZwinck:是的,但我想让它简单一点,因为我已经在这里彻底重写了整个代码。。最好不要在一篇文章中引入太多的新概念。如果我尝试一下你写的代码。。。“我对关闭的文件执行i/O操作时出错。@user3371053:您当时没有使用我的缩进;当块(由缩进确定)完成时,with
语句将自动关闭文件。我只是不明白:(
import csv
import datetime
by_year = {}
with open('wloss.csv', 'rb') as data1:
reader = csv.reader(data1)
next(reader, None) # skip first row with headers
for week, weight_loss in reader:
date = datetime.datetime.strptime(week, '%Y-%m-%d').date()
by_year.setdefault(date.year, []).append((week, weight_loss))