来自带有MultiIndex列的dict的Pandas Dataframe

时间:2016-02-24 18:33:39

标签: python pandas

我今天刚刚开始使用熊猫。我找到了一个教程,我可以创建一个看起来像

的表
foo  one  two   
bar    a    b  c
2      0    0  0
4      0    0  0
6      0    0  0

来自代码

import numpy as np
import pandas as pd

arrays = [np.hstack([ ['one']*1, ['two']*2]), ['a', 'b', 'c']]
columns = pd.MultiIndex.from_arrays(arrays, names=['foo', 'bar'])
df = pd.DataFrame(np.zeros((3,3)), columns=columns, index=['2','4','6'])
print df

我试图重复相同的事情,但用字典创建数据框。

d={'a':[0,0,0], 'b':[0,0,0], 'c':[0,0,0]}
dd = pd.DataFrame(d, columns=columns, index=['2','4','6'])
print dd

但是我得到了

foo  one  two     
bar    a    b    c
2    NaN  NaN  NaN
4    NaN  NaN  NaN
6    NaN  NaN  NaN

省略columns=columns会产生预期的数据帧,但没有多索引列。关于如何在从字典创建的数据框中实现这些多索引列的任何想法?文档似乎只涵盖了具有多索引的numpy数组。我会使用numpy,但是当不是每一行的长度相等时,我遇到了创建数组的问题。我只获得了一个ndy阵列。如果影响任何事情,我的数据很可能是字符串。

1 个答案:

答案 0 :(得分:2)

如果您使用密钥'a', 'b', 'c'传递dict,则告诉它列的名称为'a', 'b''c'。但是你的列没有命名。如果您使用的是MultiIndex,则您的列没有单个名称,而是一个名称元组,每个级别一个。因此,您需要为每列指定具有完整元组的数据:

d={('one', 'a'):[0,0,0], ('two', 'b'):[0,0,0], ('two', 'c'):[0,0,0]}