Excel 具有多个列索引和 header 行通过 pandas 进入 Python 字典
Excel with multiple column indices and header rows into a Python dictionary via pandas
我正在使用 Pyomo,我正在尝试为某些参数输入一些 4-D 数据。
我的 Excel 电子表格中的数据如下所示:
一个link到原始数据可以在这里找到:
我想导入 Python 中的数据,并将元组中的每个列索引和 header 值作为字典的键,将值作为字典的值。
基本上,预期的输出应该如下所示:
p = {('Heat', 'Site 1', 1, 1): 14,
('Heat', 'Site 1', 1, 2): 16,
('Heat', 'Site 1', 1, 3): 10,
('Heat', 'Site 1', 2, 1): 13,
('Heat', 'Site 1', 2, 2): 13,
('Heat', 'Site 1', 2, 3): 13,
('Cool', 'Site 1', 1, 1): 5,
('Heat', 'Site 1', 1, 2): 6,
...
('Elec', 'Site 2', 2, 1): 11,
('Elec', 'Site 2', 2, 2): 15,
('Elec', 'Site 2', 2, 3): 15}
我的想法是先使用 pandas 导入 excel 文件,然后使用 to_dict
方法。
我所做的是:
import pandas as pd
Loads = pd.read_excel("Time_series_parameters.xlsx", index_col=[0,1], header = [0,1])
效果很好,我能够得到一个包含两个索引列和两个 header 行的数据框:
Heat Cool Elec Heat Cool Elec
Time Site 1 Site 1 Site 1 Site 2 Site 2 Site 2
1 1 14 5 13 10 20 14
2 16 6 11 10 14 10
3 10 7 14 11 18 11
2 1 13 8 14 20 19 11
2 13 7 11 14 15 15
3 13 6 13 12 19 15
但是,无论我从那里尝试获得预期结果的什么都失败了... to_dict
方法中的所有设置都没有给我预期的结果。
因此,如果有人能在这里提供帮助,我将不胜感激。
我的解决方案是:
import pandas as pd
Loads = pd.read_excel("Time_series_parameters.xlsx", index_col=[0, 1], header=[0, 1])
out = {}
for index, inner in Loads.iteritems():
for sec_index, value in inner.iteritems():
out[index[0], index[1], sec_index[0], sec_index[1]] = value
结果输出为:
{('Heat', 'Site 1', 1, 1): 14,
('Cool', 'Site 1', 1, 1): 5,
('Elec', 'Site 1', 1, 1): 13,
('Heat', 'Site 2', 1, 1): 10,
('Cool', 'Site 2', 1, 1): 20,
('Elec', 'Site 2', 1, 1): 14,
('Heat', 'Site 1', 1, 2): 16,
('Cool', 'Site 1', 1, 2): 6,
('Elec', 'Site 1', 1, 2): 11,
('Heat', 'Site 2', 1, 2): 10,
...
我还找到了另一个答案,它使用其他一些 pandas
功能基本上实现了相同的结果。代码如下:
Loads = pd.read_excel("Time_series_parameters.xlsx", sheet_name = "Loads", index_col=[0,1], header=[0, 1])
Loads = Loads.stack().stack()
Loads = Loads.reorder_levels([3,2,0,1])
p = Loads.to_dict()
输出再次看起来像这样:
{('Cool', 'Site 1', 1, 1): 18,
('Elec', 'Site 1', 1, 1): 18,
('Heat', 'Site 1', 1, 1): 19,
('Cool', 'Site 2', 1, 1): 17,
...
我正在使用 Pyomo,我正在尝试为某些参数输入一些 4-D 数据。
我的 Excel 电子表格中的数据如下所示:
一个link到原始数据可以在这里找到:
我想导入 Python 中的数据,并将元组中的每个列索引和 header 值作为字典的键,将值作为字典的值。
基本上,预期的输出应该如下所示:
p = {('Heat', 'Site 1', 1, 1): 14,
('Heat', 'Site 1', 1, 2): 16,
('Heat', 'Site 1', 1, 3): 10,
('Heat', 'Site 1', 2, 1): 13,
('Heat', 'Site 1', 2, 2): 13,
('Heat', 'Site 1', 2, 3): 13,
('Cool', 'Site 1', 1, 1): 5,
('Heat', 'Site 1', 1, 2): 6,
...
('Elec', 'Site 2', 2, 1): 11,
('Elec', 'Site 2', 2, 2): 15,
('Elec', 'Site 2', 2, 3): 15}
我的想法是先使用 pandas 导入 excel 文件,然后使用 to_dict
方法。
我所做的是:
import pandas as pd
Loads = pd.read_excel("Time_series_parameters.xlsx", index_col=[0,1], header = [0,1])
效果很好,我能够得到一个包含两个索引列和两个 header 行的数据框:
Heat Cool Elec Heat Cool Elec
Time Site 1 Site 1 Site 1 Site 2 Site 2 Site 2
1 1 14 5 13 10 20 14
2 16 6 11 10 14 10
3 10 7 14 11 18 11
2 1 13 8 14 20 19 11
2 13 7 11 14 15 15
3 13 6 13 12 19 15
但是,无论我从那里尝试获得预期结果的什么都失败了... to_dict
方法中的所有设置都没有给我预期的结果。
因此,如果有人能在这里提供帮助,我将不胜感激。
我的解决方案是:
import pandas as pd
Loads = pd.read_excel("Time_series_parameters.xlsx", index_col=[0, 1], header=[0, 1])
out = {}
for index, inner in Loads.iteritems():
for sec_index, value in inner.iteritems():
out[index[0], index[1], sec_index[0], sec_index[1]] = value
结果输出为:
{('Heat', 'Site 1', 1, 1): 14,
('Cool', 'Site 1', 1, 1): 5,
('Elec', 'Site 1', 1, 1): 13,
('Heat', 'Site 2', 1, 1): 10,
('Cool', 'Site 2', 1, 1): 20,
('Elec', 'Site 2', 1, 1): 14,
('Heat', 'Site 1', 1, 2): 16,
('Cool', 'Site 1', 1, 2): 6,
('Elec', 'Site 1', 1, 2): 11,
('Heat', 'Site 2', 1, 2): 10,
...
我还找到了另一个答案,它使用其他一些 pandas
功能基本上实现了相同的结果。代码如下:
Loads = pd.read_excel("Time_series_parameters.xlsx", sheet_name = "Loads", index_col=[0,1], header=[0, 1])
Loads = Loads.stack().stack()
Loads = Loads.reorder_levels([3,2,0,1])
p = Loads.to_dict()
输出再次看起来像这样:
{('Cool', 'Site 1', 1, 1): 18,
('Elec', 'Site 1', 1, 1): 18,
('Heat', 'Site 1', 1, 1): 19,
('Cool', 'Site 2', 1, 1): 17,
...