2015-05-30 88 views
1

我是从一个Python字典创建大熊猫数据帧:熊猫数据帧生成不一致

import numpy as np 
import pandas as pd 

obs_dict = { 
      'pos':[[0,0],[10,10]], 
      'vel':[[0,0],[0,0]], 
      'mass':np.array([10000,10000]) 
      } 

print pd.DataFrame(obs_dict) 

返回:

mass  pos  vel 
0 10000 [0, 0] [0, 0] 
1 10000 [10, 10] [0, 0] 

请注意,我有一个二维列表中的位置的项目(” pos')和速度('vel')列。然而,当我用2D numpy的阵列替换2D名单:

obs_dict = { 
      'pos':np.array([[0,0],[10,10]]), 
      'vel':np.array([[0,0],[0,0]]), 
      'mass':np.array([10000,10000]) 
      } 

我得到一个异常:

Exception: Data must be 1-dimensional 

不幸的是,我使用的数据包含在numpy的阵列中,我不想将它转换为python列表,有什么办法可以使这项工作?

+0

列表的列表与2d numpy数组不同,我想你需要'np.array([[0,0],[10,10]])。tolist()'得到相同的行为作为列表 –

+0

你希望作为列值存储什么?基本上它不会工作,试图存储二维数组,因为它会检查尺寸,你会发现,下面的作品,但我不知道这是你想要的:'obs_dict = { 'pos ':[np.array([[0,0],[10,10]])], 'vel':[np.array([[0,0],[0,0]])], '质量':[np.array([10000,10000])] } – EdChum

+0

@EdChum这导致只有一行,我想要两行(每个位置,速度和质量) – abc

回答

0

在此代码:

obs_dict = { 
     'pos':[[0,0],[10,10]], 
     'vel':[[0,0],[0,0]], 
     'mass':np.array([10000,10000]) 
     } 
print pd.DataFrame(obs_dict)` 

你只是得到了数据帧的一些对象列,尝试dtypes:

tt = pd.DataFrame(obs_dict) 
tt.dtypes 

显示:

mass  int64 
pos  object 
vel  object 
dtype: object 

我不认为这可以做到。