【问题标题】:Convert a Dict Comprehension into a DataFrame将字典理解转换为 DataFrame
【发布时间】:2020-06-26 02:56:09
【问题描述】:

有人能解释一下为什么这两个结果不同吗?

我试图将多键字典理解转换为 DataFrame。

第一种方法:

Dict1={(i,j):i+j for i in range(2) for j in range(2)}
print(pd.DataFrame.from_dict(Dict1, orient="index").reset_index())

结果:数据框有一个索引(应该有两个)

    index  0
0  (0, 0)  0
1  (0, 1)  1
2  (1, 0)  1
3  (1, 1)  2

第二种方法:

Dict2={(i,j):{"value":i+j} for i in range(2) for j in range(2)}
print(pd.DataFrame.from_dict(Dict2, orient="index").reset_index())

结果:数据框有两个索引

       level0  level_1  value
0        0        0      0
1        0        1      1
2        1        0      1
3        1        1      2

我设法使用第二种方法做到了,但为什么第一种方法不起作用?为什么它没有将字典键保留为两个不同的索引?

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    你可以试试

    pd.DataFrame(list(Dict1.values()), index = pd.MultiIndex.from_tuples(Dict1.keys()))
    

    或

    Dict1={(i,j):[i+j] for i in range(2) for j in range(2)}
    
    pd.DataFrame(Dict1).T
    

    它似乎不会将作为元组的字典键默认为多索引。

    【讨论】:

    • 感谢您的回答,您的第一个建议确实有效,但您的第二个建议“如果使用所有标量值,您必须传递一个索引”时出现错误。尽管如此,问题是¿您知道为什么添加“{}”和名称(“值”)会改变 DataFrame.from_dict 函数的行为吗?
    • 做了一个小的编辑来澄清第二行。我不确定为什么您的第二种方法会强制使用多索引。希望其他人能澄清一下。
    猜你喜欢
    • 2019-02-06
    • 2016-10-16
    • 2017-12-26
    • 2014-12-30
    • 2016-05-26
    • 2021-01-18
    • 2013-11-16
    相关资源
    最近更新 更多