从形式{index:行值列表}中的字典构造Pandas DataFrame

时间:2014-12-27 09:31:03

标签: python list pandas dictionary dataframe

我设法使用以下方式执行此操作:

dft = pd.DataFrame.from_dict({
                    0: [50, 45, 00, 00], 
                    1: [53, 48, 00, 00],
                    2: [56, 53, 00, 00],
                    3: [54, 49, 00, 00],
                    4: [53, 48, 00, 00],
                    5: [50, 45, 00, 00]
                    }, orient='index'
                    )

完成后,构造函数看起来就像DataFrame一样,易于阅读/编辑:

>>> dft
    0   1   2   3
0   50  45  0   0
1   53  48  0   0
2   56  53  0   0
3   54  49  0   0
4   53  48  0   0
5   50  45  0   0

DataFrame.from_dict constructor没有列参数,因此为列提供合理的名称需要额外的步骤:

dft.columns = ['A', 'B', 'C', 'D']

对于这种方便(例如用于单元测试)初始化DataFrames的方式来说,这似乎很笨拙。

所以我想知道:有更好的方法吗?

3 个答案:

答案 0 :(得分:9)

或者,您可以使用DataFrame.from_items()从字典中构造DataFrame;这允许您同时传入列名。

例如,如果d是您的字典:

d = {0: [50, 45, 0, 0],
     1: [53, 48, 0, 0],
     2: [56, 53, 0, 0],
     3: [54, 49, 0, 0],
     4: [53, 48, 0, 0],
     5: [50, 45, 0, 0]}

数据为d.items(),方向又为'index'。字典键成为索引值:

>>> pd.DataFrame.from_items(d.items(), 
                            orient='index', 
                            columns=['A','B','C','D'])
    A   B  C  D
0  50  45  0  0
1  53  48  0  0
2  56  53  0  0
3  54  49  0  0
4  53  48  0  0
5  50  45  0  0

在Python 2中,您可以使用d.iteritems()来生成字典的内容,以避免在内存中创建另一个列表。

答案 1 :(得分:5)

一种方法是:

df = pd.DataFrame.from_dict({
0: {"A":50, "B":40},
1: {"A":51, "B":30}}, orient='index')

但是,对于快速测试初始化​​,我可能更喜欢你的方式+然后设置列。

答案 2 :(得分:1)

你可以尝试:

x=pd.DataFrame({0:[50,45],1:[53,48],2:[56,53]}, index=["A","B"]).transpose()

但是,当你将标准索引指定为字典的键时,它仍然很奇怪。

为什么不直接

x = pd.DataFrame({"A":[50,53,56],"B":...})