我需要一些帮助来制作CSV文件中的一些列表:
现在,我导入了一个文件并制作了两个列表。我的代码在这里:
列表week
包含所有周数,日期取自row[0]
。
列表weight = []
包含来自row[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年的数据):datetime.datetime(2005, 4, 10, 0, 0),
datetime.datetime(2005, 4, 17, 0, 0),
datetime.datetime(2005, 4, 24, 0, 0),
datetime.datetime(2005, 5, 1, 0, 0),
datetime.datetime(2005, 5, 8, 0, 0),
datetime.datetime(2005, 5, 15, 0, 0),
datetime.datetime(2005, 5, 22, 0, 0),
我知道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 = []
应该发表一个for
语句吗?
另外,如何从2011年,2012年,2013年获得正确的权重,并将它们放入其他3个列表中:
weight_year_2011 = []
weight_year_2012 = []
weight_year_2013 = []
我必须制作一个包含2011年,2012年和2013年数据的3个图(1图)。 希望有人可以帮助我们制作这些新列表并将正确的数据放入其中。
答案 0 :(得分:2)
我使用词典按日期对数据进行分组。
您似乎在第一行有一个带有标题的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))
这会构建一个年份键入的字典,每个值都是(date, weight_loss)
元组的列表。