Python 通过for循环(?)创建字典
我必须为我的测量数据创建一个大字典。 到目前为止,我的(简化)代码如下所示:Python 通过for循环(?)创建字典,python,pandas,loops,for-loop,Python,Pandas,Loops,For Loop,我必须为我的测量数据创建一个大字典。 到目前为止,我的(简化)代码如下所示: i=0 对于范围内的i(len(站点数据文件)):#范围(0299) 车站数据熊猫=车站数据熊猫[i] 车站id=str(int(车站数据)[“车站id”][0])) Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和) #正在为此词典中的年度数据创建词典层 年度数据={ “Y_-RR”:Y_-RR } #为此字典中的montly数据创建字典层 每月数据={ “莫乌日” } #为
i=0
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
#创建字典层,station id可以在其中调用staiondata
车站数据dic={
车站id:车站
}
#创建字典的最后一层
站点数据字典={
“车站数据”:车站数据
}
这是输出:
station_data_dictionary
Out[387]:
{'station_data': {'4706': {'montly_data': {'MO_RR'}, # "4706" is the id from the last element in station_data_files_pandas
'anual_data': {'Y_RR': YearMonth
# YearMonth is the index...
# I actually wanted the Index just to show yyyy-mm ...
1981-12-31 1164.3
1982-12-31 852.4
1983-12-31 826.5
1984-12-31 798.8
1985-12-31 NaN
1986-12-31 NaN
1987-12-31 NaN
1988-12-31 NaN
1989-12-31 NaN
1990-12-31 1101.1
1991-12-31 892.4
1992-12-31 802.1
1993-12-31 873.5
1994-12-31 842.7
1995-12-31 962.0
1996-12-31 NaN
1997-12-31 927.9
1998-12-31 NaN
1999-12-31 NaN
2000-12-31 997.8
2001-12-31 986.3
2002-12-31 1117.6
2003-12-31 690.8
2004-12-31 NaN
2005-12-31 NaN
2006-12-31 NaN
2007-12-31 NaN
2008-12-31 NaN
2009-12-31 NaN
2010-12-31 NaN
Freq: A-DEC, Name: MO_RR, dtype: float64}}}}
正如您所见,我的输出仅由一张“表”组成。预计将有300张
我假设我的代码在数据循环时覆盖了它,因此在最后,我的输出只是由station_data_files_文件中的最后一个元素生成的一张纸。我怎样才能解决这个问题?我的方法可能完全错了吗
当它准备好时,它必须看起来像:
station_data_dictionary["station_data"]["403"]["anual_data"]["Y_RR"]
station_data_dictionary["station_data"]["573"]["anual_data"]["Y_RR"]
station_data_dictionary["station_data"]["96"]["anual_data"]["Y_RR"]
……等等
正如你所看到的,唯一允许我改变的东西,正如我在字典中称之为不同的东西一样,就是我的身份证
注意:有一个问题的标题完全相同,但对我一点帮助都没有……我没有测试这个问题,因为我没有你的数据,但这应该会生成你所需的词典。唯一的变化是在顶部和底部:
站点数据字典={
“台站数据”:{}
}
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
车站数据字典[“车站数据”][车站id]=车站
注意,当循环为您初始化变量时,在for
循环之前不需要像i=0
这样的语句
此外,字典的
“station\u data”
层似乎是多余的,因为它是该层的唯一键,但您在所需的输出中有它,所以我将其保留在了中。我没有测试它,因为我没有您的数据,但这应该会生成您所需的字典。唯一的变化是在顶部和底部:
站点数据字典={
“台站数据”:{}
}
对于范围内的i(len(站点数据文件)):#范围(0299)
车站数据熊猫=车站数据熊猫[i]
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
#正在为此词典中的年度数据创建词典层
年度数据={
“Y_-RR”:Y_-RR
}
#为此字典中的montly数据创建字典层
每月数据={
“莫乌日”
}
#为每个站点创建字典层。每个月都有每月和每年的数据
车站={
“montly_数据”:montly_数据,
“年度数据”:年度数据
}
车站数据字典[“车站数据”][车站id]=车站
注意,当循环为您初始化变量时,在for
循环之前不需要像i=0
这样的语句
此外,字典的“station\u data”
层似乎是多余的,因为它是该层的唯一键,但您在所需的输出中有它,所以我将其留在了中。尝试下面的方法。
此外,如果您需要词典保持与添加词典相同的顺序,则必须使用OrderedDict from collections包
因此,当您打印字典或循环其数据时,您将按照在下面的代码中添加它们的相同顺序进行循环
Obs:我假设station_data_files_pandas是一个列表,而不是一个字典,这就是为什么我修改了for循环的“签名”以使用增强的for。
如果我错了,并且这个变量实际上是一个字典,并且for循环的每个整数都是这个字典的一个键,那么您也可以循环通过如下项:
对于站点数据文件中的k,v.items():
#现在k携带您以前使用的整数。
#而v则携带着台站数据
代码更正
导入集合
station\u data\u dictionary=collections.OrderedDict()
#对于范围内的i(len(站点数据文件)):#范围(0299)
#使用增强的for循环
对于站点数据文件中的站点数据熊猫:#范围(0299)
#这已经不需要了
#车站数据熊猫=车站数据熊猫[i]
#车站id=str(int(车站数据)[“车站id”][0]))
#您可以直接转换为字符串
车站id=str(int(车站数据)[“车站id”][0]))
Y_RR=站点数据_f_pandas[“MO_RR”]。重新采样(“A”)。应用(非常总和)
MO_RR=#这里有些东西
#为手动数据创建字典层