我今天刚刚开始使用熊猫。我找到了一个教程,我可以创建一个看起来像
的表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阵列。如果影响任何事情,我的数据很可能是字符串。
答案 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]}