Python 数据帧与熊猫

Python 数据帧与熊猫,python,pandas,dataframe,Python,Pandas,Dataframe,我正在使用一个存储了多个词典的词典。看起来是这样的(这条很短) 我想写一个excel文件,看起来像。 我使用了以下代码: 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.Multi

我正在使用一个存储了多个词典的词典。看起来是这样的(这条很短)

我想写一个excel文件,看起来像。

我使用了以下代码:

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())]))
并尝试使用它制作dataframe,它看起来令人满意,但当我不想将其写入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位于行的末尾。
Ps:我很抱歉没有正确发布我的代码。我不知道如何在不生成代码的情况下进行缩进。希望我没有让其他人做太多编辑工作。提前谢谢你。

不确定这是最好的方式,但至少从你对
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\u excel

谢谢你的回答!我试过你的建议了!但它只打印一个随机值。它只打印随机数\u 1值行。知道为什么吗?提前谢谢你!@NoobProgrammer我做了
df.to\u excel('myEx.xlsx'))
myEx和myEx包含上面显示的所有值。不确定会发生什么。@NoobProgrammer和“0在行的末尾”是列的自动名称,带有
random\u number\u 3等。
因为在使用
pd.DataFrame
:)时您没有定义列的名称,所以我重新创建了word中的打印输出。我认为多个粗体点导致了我的问题,因为它们“破坏”了数据帧?可能吗?因为它只写整个数据中的一个。便于可视化的图片:没关系,很难解释:)是的,df.to_csv给了我更糟糕的输出。只有两列两行。加在一起。但同样只有最后一组数据:从最后一个“数字”和“字符串”开始。
                                            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