python:在矩阵

时间:2016-03-02 13:01:56

标签: python numpy dictionary

我是python的新手,现有的一段代码创建了一个类似于下面的对象。这是遗留代码的一部分。遗憾的是,我无法改变它。代码创建了许多看起来像以下格式的对象:

[[{'a': 2,'b': 3}],[{'a': 1,'c': 3}],[{'c': 2,'d': 4}]]

我正在尝试将此对象转换为矩阵或numpy数组。在这个具体的例子中 - 它将有三行(1,2,3)和4列(a,b,c,d),字典值插入单元格中。 (我已经插入了这个矩阵看起来像一个小玩具的例子。但是 - 我不打算从头开始重新创建表格,但我正在寻找以矩阵格式转换上述对象的代码)。

我正在努力寻找一种快速简便的方法来做到这一点。任何提示或建议非常感谢。

   a  b  c  d
1  2  3  0  0
2  1  0  3  0
3  0  2  0  4

2 个答案:

答案 0 :(得分:1)

Simpy使用:

import pandas as pd
df = pd.DataFrame.from_items([('1', [2, 3, 0,0]), ('2', [1, 0, 3,0]),('3', [0, 2, 0,4])], orient='index', columns=['a', 'b', 'c','d'])


arr = df.values

然后,您可以像普通的numpy数组一样引用它:

print(arr[0,:]) 

答案 1 :(得分:1)

我怀疑你在关注快速和简单,当你需要先解决问题时。这不是np.array或“pandas”的正常输入格式。所以让我们专注于此。

这是一份清单清单;建议一个二维数组。但每个子列表包含一个字典,而不是值列表。

In [633]: dd=[[{'a': 2,'b': 3}],[{'a': 1,'c': 3}],[{'c': 2,'d': 4}]]
In [634]: dd[0]
Out[634]: [{'b': 3, 'a': 2}]

因此,让我们定义一个将字典转换为数字列表的函数。我们可以解决a,b,c,d标签来自何处的问题,以及是否需要在dd之后收集它们。

In [635]: dd[0][0]
Out[635]: {'b': 3, 'a': 2}
In [636]: def mk_row(adict):
    return [adict.get(k,0) for k in ['a','b','c','d']]
   .....: 
In [637]: mk_row(dd[0][0])
Out[637]: [2, 3, 0, 0]

所以现在我们只需要将函数应用于每个子列表

In [638]: [mk_row(d[0]) for d in dd]
Out[638]: [[2, 3, 0, 0], [1, 0, 3, 0], [0, 0, 2, 4]]

这是@Colin提供给pandas的列表。它也可以提供给np.array

In [639]: np.array([mk_row(d[0]) for d in dd])
Out[639]: 
array([[2, 3, 0, 0],
       [1, 0, 3, 0],
       [0, 0, 2, 4]])