2016-02-24 180 views
0

我刚开始使用熊猫今天。我发现了一个教程,我可以创建一个看起来像从多维数据集列表的字典中获取熊猫数据框

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产生一个数据帧预期,但没有multiindexed列。关于如何在从字典创建的数据框中实现这些多索引列的想法?该文档似乎只包含具有多重索引的numpy数组。我会使用numpy,但是当创建数组的时候,如果不是每一行的长度都相等,我会遇到问题。我只得到一个1D numpy数组。我的数据大多数可能是字符串,如果这影响任何东西。

回答

1

如果您通过密码'a', 'b', 'c'的字典,您告诉它列名为'a', 'b''c'。但是你的列没有被命名。如果您使用的是MultiIndex,那么您的列没有单一名称,而是一个名称元组,每个级别都有一个名称。因此,您需要为每列指定具有完整元组的数据:

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

谢谢。我认为这是沿着这些线,但我不知道如何指定名称。 – Shatnerz