我在python中有一个列表,有10,000多个温度条目没有相应的日期。从本质上讲,前12个参赛作品是10月1日,11月1日,9月1日。以下12个参赛作品分别为10月2日,11月2日,9月2日。这一直持续到第31天。
该计划也重复了20年(即1980年至2000年)
相反,我想以更合理的格式组织这些值... 10月1日,2日,3日等。
这样做有简单的方法吗?我试过循环,但没有用。我对编码很新,所以越简单就越好。
###Code to getting the list:###
rawdata = open('')
data = csv.reader(rawdata)
listoflists = []
for i in e1:
listoflists.append(i)
print(i)
temperaturelist = []
for sublist in listoflists:
for item in sublist:
temperaturelist.append(item)
for i in temperaturelist:
if i < 13:
newlist = ...
对不起,这可能是一个存在多个问题的大问题,而不是编码“x”的更优化方法。
你注意到欧洲的印刷方式“1980年10月2日”是“2/10/1980”吗?你提到的日期顺序只是这些日期的词典排序。
如果是这种情况,您可以尝试以下方法:
首先生成所有日期(您必须确保您的数据完全是这些日子,不多也不少):
import datetime
d0 = datetime.date(1980, 1, 1)
dN = datetime.date(2000, 12, 31)
delta = datetime.timedelta(days = 1)
dates = []
printdates = []
d = d0
while d <= dN:
dates.append(d)
printdates.append("{d.day}/{d.month}/{d.year}".format(d=d))
d = d + delta
然后使用pandas按字典顺序对它们进行排序:
import pandas as pd
date_df = pd.DataFrame({'print_date': printdates,
'date': dates}
).sort_values("print_date")
现在转到您的CSV数据。使用pandas加载它们,分配日期列,然后按实际日期排序:
csv_df = pd.read_csv(...)
csv_df["print_date"] = date_df["print_date"]
csv_df["date"] = date_df["date"]
csv_df = csv_df.sort_values("date")
我没有测试这些代码。可能有错误。但我希望你能得到这个概念。
如果我理解得很好,从最初的清单......
您可以先创建一个实用程序迭代器,它返回可配置大小的子列表:
def iter_by(length, some_iterable):
iterator = iter(some_iterable)
while True:
dozen = [next(iterator) for _ in range(length)]
yield dozen
使用它,你可以esealy检索每月同一天的列表:
plenty_of_values = range(20 * 12 * 31) # 20 years, 12 months, 31 days
same_month_day_list = list(iter_by(12, plenty_of_values))
# [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
# [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
# [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35],
# etc...]
这相当于:
然后,您可以按31块的方式压缩这些列表,以获得连续每年连续几个月的连续天数列表:
ordered_years = [list(zip(*year)) for year in iter_by(31, ame_month_day_list)]
# [[(0, 12, 24, 36, ..., 360),
# (1, 13, 25, 37, ..., 361),
# (2, 14, 26, 38, ..., 362),
# (3, 15, 27, 39, ..., 363),
# (4, 16, 28, 40, ..., 364),
# (5, 17, 29, 41, ..., 365),
# (6, 18, 30, 42, ..., 366),
# (7, 19, 31, 43, ..., 367),
# (8, 20, 32, 44, ..., 368),
# (9, 21, 33, 45, ..., 369),
# (10, 22, 34, 46, ..., 370),
# (11, 23, 35, 47, ..., 371)],
# [(372, 384, ..., 732),
# (373, 385, ..., 733),
# ...
# (383, 395, ..., 743)],
# [(744, 756, ..., 1104),
# (745, 757, ..., 1105),
# ...
# (755, 767, ..., 1115)],
# etc...
# ]
结果是一个列表,其中包含每年的列表。每年列表包含每个月的元组。每个月包含每天的值。整个想法是临时的。