我有一个双索引字典,其中一个索引是时间,另一个是特定的能源生产机器。运行程序后,连接到按键的字典值将是每台机器每小时的油耗值。 现在,我想将其传输到一个 excel 文件中,其中第一个键(时间(作为行值,第二个键(机器类型(作为列值,用相应的值填充单元格。 我该怎么做?
我尝试查找熊猫文档和/或其他不同的解决方案,但没有一个正常工作。
字典是这样的:
d = {}
d['mach1',1] = 4
d['mach1',2] = 9
d['mach1',3] = 16
d['mach2',1] = 10
d['mach2',2] = 2
d['mach2',3] = 4
d['mach3',1] = 3
d['mach3',2] = 6
d['mach3',3] = 1
我想要一个看起来像这样的数据库:
mach1 mach2 mach3
1 4 10 3
2 9 2 6
3 16 4 1
我该怎么做?提前谢谢你,对不起我的英语不好。
Ciao Andrea,
从你提供的字典开始作为示例:
-
检索列和索引的名称:
col_name = list({x for (x,_) in list(d.keys())}) index = list({y for (_,y) in list(d.keys())})
-
格式化熊猫的数据:
dd = {i: [] for i in col_name} for (col_id,row_id),v in d.items(): dd[col_id].append(v)
-
我创建 df 并设置索引:
df = pd.DataFrame({ key:pd.Series(value) for key, value in dd.items() }) df.index = index
# mach1 mach2 mach3
# 1 4 10 3
# 2 9 2 6
# 3 16 4 1
-
和熊猫做点什么DF
-
将 df 存储到 csv 文件:
df.to_csv("myData.csv", sep=";")
-
使用 Excel 打开 csv 并执行某些操作
-
从csv文件加载数据:
df = pd.read_csv("myData.csv", sep=";", index_col=0)
完整的代码可在此处获得:
def my_dict_to_df(d):
col_name = list({x for (x,_) in list(d.keys())})
index = list({y for (_,y) in list(d.keys())})
dd = {i: [] for i in col_name}
for (col_id,row_id),v in d.items():
dd[col_id].append(v)
df = pd.DataFrame({ key:pd.Series(value) for key, value in dd.items() })
df.index = index
return df
df = my_dict_to_df(d)
df.to_csv("myData.csv", sep=";")
编辑:我以为数据已经订购了。如果没有这个假设,你需要在字典d
、col_name
和index
开头排序:
def my_dict_to_df(d):
d = dict(sorted(d.items()))
col_name = sorted({x for (x,_) in list(d.keys())})
index = sorted({y for (_,y) in list(d.keys())})
dd = {i: [] for i in col_name}
for (col_id,row_id),v in d.items():
dd[col_id].append(v)
df = pd.DataFrame({ key:pd.Series(value) for key, value in dd.items() })
df.index = index
return df
注意1:这不是解决问题的最有效方法。它写在这里是为了使其尽可能易于理解
注意2:如果可以,请更改输入词典的格式。这是不必要的复杂
注3:看来你的想法不是很清楚,这真的是你需要的吗?
我也没有让它与内置的 sth 一起工作或漂亮的神奇短...
但是 - 您可以"手动"执行此操作:
import pandas as pd
# first with constants for your example to get the point:
df = pd.DataFrame(columns=['mach1', 'mach2', 'mach3'], index=[1, 2, 3])
# but of course better calculated for general case:
df = pd.DataFrame(columns=sorted(set([t[0] for t in d.keys()])), index=sorted(set([t[1] for t in d.keys()])))
# mach1 mach2 mach3
# 1 NaN NaN NaN
# 2 NaN NaN NaN
# 3 NaN NaN NaN
for (k1, k2), v in d.items():
df.loc[k2, k1] = v
# mach1 mach2 mach3
# 1 4 10 3
# 2 9 2 6
# 3 16 4 1
然后,您可以为Excel编写csv:
df.to_csv('export.csv')
# ,mach1,mach2,mach3
# 1,4,10,3
# 2,9,2,6
# 3,16,4,1