我正在使用存储了多个词典的字典。看起来像这样(这是相当短的)。
dict = {('random_number_1', 'random_number_2'): {'random_string_1': 'random_number_3'}, ('random_number_1', 'random_number_4'): {'random_string_2': 'random_number_5'}, ('random_number_1', 'random_number_6'): {'random_string_3': 'random_number_7', 'random_string_4': 'random_number_8', 'random_string_5': 'random_number_10'}}
{('random_number_11','random_number_13'): {'random_string_6': 'random_number_14', 'random_string_7': 'random_number_15'}}
我希望编写类似Excel文件。 Example
我使用了代码:
newdict = {(k1, k2):v2 for k1,v1 in dict.items() \
for k2,v2 in dict[k1].items()}
df = pd.DataFrame([newdict[i] for i in sorted(newdict)],
index=pd.MultiIndex.from_tuples([i for i in sorted(newdict.keys())]))
并尝试使用它制作数据框,它看起来令人满意,但是当我不想将其写入excel(使用df.to_excel()时,我得到一个错误: “ write()中不受支持的类型'tuple'”。我认为问题出在我的数据框中。当我打印出来时,它看起来像。
0
(random_number_1, random_number_2) random_string_1 random_number_3
(random_number_1, random_number_4) random_string_2 random_number_5
(random_number_1, random_number_6) random_string_3 random_number_7
random_string_4 random_number_8
random_string_5 random_number_9
0
(random_number_10, random_number_11) random_string_6 random_number_12
random_string_7 random_umber_13
那些0在行的末尾。 附:对不起,我没有正确发布我的代码。不知道如何在不编写代码的情况下缩进。希望我不会引起别人过多的编辑工作。先感谢您。
答案 0 :(得分:0)
不确定这是最好的方法,但是至少从df
的定义出发,您需要重置索引级别,然后将索引从元组更改为多索引。然后用您的newdict
做:
df = (pd.DataFrame( [newdict[i] for i in sorted(newdict)],
index=pd.MultiIndex.from_tuples([i for i in sorted(newdict.keys())]))
.reset_index(level=1) # to make random_string as a column not a level of index
.rename(columns={'level_1':'string',0:'number'})) #this is cosmetic. not necessary
df.index = pd.MultiIndex.from_tuples(df.index) # create the multiindex from current tuples in index
df
就像
string number
random_number_1 random_number_2 random_string_1 random_number_3
random_number_4 random_string_2 random_number_5
random_number_6 random_string_3 random_number_7
random_number_6 random_string_4 random_number_8
random_number_6 random_string_5 random_number_10
random_number_11 random_number_13 random_string_6 random_number_14
random_number_13 random_string_7 random_number_15
当您进行df.to_excel
时,它会带给您接近您想要的东西