我是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
答案 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]])