数据框和熊猫

时间:2018-06-27 10:54:27

标签: python pandas dataframe

我正在使用存储了多个词典的字典。看起来像这样(这是相当短的)。

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在行的末尾。 附:对不起,我没有正确发布我的代码。不知道如何在不编写代码的情况下缩进。希望我不会引起别人过多的编辑工作。先感谢您。

1 个答案:

答案 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时,它会带给您接近您想要的东西