【发布时间】:2025-12-06 20:25:01
【问题描述】:
我正在从 python 字典创建一个 pandas 数据框:
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 列表,有什么办法可以做到这一点吗?
【问题讨论】:
-
列表列表与二维 numpy 数组不同,我想您需要
np.array([[0,0],[10,10]]).tolist()才能获得与列表相同的行为 -
您希望将什么存储为列值?基本上,尝试存储二维数组是行不通的,因为 ctor 将检查您发现的尺寸,以下工作但我不知道这是否是您想要的:
obs_dict = { 'pos':[np.array([[0,0],[10,10]])], 'vel':[np.array([[0,0],[0,0]])], 'mass':[np.array([10000,10000])] } -
@EdChum 这导致只有一行,我想要两行(每个位置、速度和质量一个)
-
@PadraicCunningham 这只是一个测试用例,真正的代码将有超过 10000 个速度、质量和位置,所以 tolist() 将是一个主要的减速
-
在尝试了一些技巧之后,我认为这无法做到,我从未见过存储多维 np 数组的系列,我只见过单独的列二维数组,所以我建议你把它看成一个结构
标签: python arrays numpy pandas