Python,制作3个日期列表

时间:2014-03-03 12:27:29

标签: python python-2.7 csv

我需要一些帮助来制作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图)。 希望有人可以帮助我们制作这些新列表并将正确的数据放入其中。

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)元组的列表。