python - 如何在Python中将字典加载到ndarray中

标签 python pandas numpy

您好,我正在尝试将 4x4 矩阵从字典加载到 np 数组中,

u'{"column0":{"x":1,"y":0.0,"z":0.0,"w":-1.0},
   "column1":{"x":0.0,"y":1,"z":0.0,"w":-1.0},
   "column2":{"x":1,"y":1,"z":1.0,"w":-1.0},
   "column3":{"x":-1.0,"y":-1.0,"z":-1.0,"w":-1.0}
  }'

我想将其加载为

array([[ 1,0., 0.,-1 ],
       [ 0.,1,0.,-1 ],
       [ 1,1,1,-1 ],
       [ -1,-1,-1,-1 ]])

目前我正在循环每个元素,我确信有更好的直接使用 pandas 或 numpy 的 pythonic 方法。有什么建议吗?

最佳答案

您可以通过numpypandas来完成此操作。这两种方法都需要 ast.literal_eval

由于字典是无序的,因此每种方法都需要小心确保列按照您的要求进行排序。

设置

import numpy as np, pandas as pd
from ast import literal_eval

mystr = """{"column0":{"x":1,"y":0.0,"z":0.0,"w":-1.0},
   "column1":{"x":0.0,"y":1,"z":0.0,"w":-1.0},
   "column2":{"x":1,"y":1,"z":1.0,"w":-1.0},
   "column3":{"x":-1.0,"y":-1.0,"z":-1.0,"w":-1.0}
  }"""

d = literal_eval(mystr)

选项 1:numpy

res_np = np.array([[v[j] for j in ['x', 'y', 'z', 'w']] for k, v in d.items()])

# array([[ 1.,  0.,  0., -1.],
#        [ 0.,  1.,  0., -1.],
#        [ 1.,  1.,  1., -1.],
#        [-1., -1., -1., -1.]])

选项2:pandas

res_df = pd.DataFrame(d).T.iloc[:, [1, 2, 3, 0]].values

# array([[ 1.,  0.,  0., -1.],
#        [ 0.,  1.,  0., -1.],
#        [ 1.,  1.,  1., -1.],
#        [-1., -1., -1., -1.]])

关于python - 如何在Python中将字典加载到ndarray中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737995/

相关文章:

python - 值错误 : I/O operation on closed file with ffmpeg

python - 在 python 中查找 utf-16 文件。如何?

python - 加载 numpy 包的正式方法是什么?

python - 将 numpy.nd 数组转换为 json

python - Google App Engine - 为特定网址编写 app.yaml,如 applicationName.appspot.com/docs/ec-quickstart/index.html

python - 相对于父窗口居中 Qt 子窗口

python - 在 pandas 行中嵌套列名,尝试执行 unstack 类型操作

python - 相当于 Python 中 R 的 sub 和 paste(字符串和数字的连接)

python - 用另一个数据框 pandas 的第一个值填充 0 和 1 系列的数据框

python - 需要对 numpy 索引进行一些澄清吗?