我试图添加像[[(1,0.44),(2,0.5),(3,0.1)],[(2,0.63),(1,0.85),(3,0.11)],[...]]
这样的浮动值
到Pandas数据框,看起来像是从元组的第一个值构建的矩阵
df = 1 2 3
1 0.44 0.5 0.1
2 0.85 0.63 0.11
3 ... ... ...
我试过了:
for key, value in enumerate(outer_list):
for tuplevalue in value:
df.ix[key][tuplevalue[0]] = tuplevalue[1]
问题是我的NxN-Matrix包含大约10000x10000个元素,因此我的方法需要很长时间。还有其他可能加快这个速度吗?
(不幸的是,列表中的值不是由第一个元组元素排序的)
答案 0 :(得分:2)
使用列表推导来首先对数据进行排序和提取。然后从已排序和清理的数据中创建数据框。
data = [[(1, 0.44), (2, 0.50), (3, 0.10)],
[(2, 0.63), (1, 0.85), (3, 0.11)]]
# First, sort each row.
_ = [row.sort() for row in data]
# Then extract the second element of each tuple.
new_data = [[t[1] for t in row] for row in data]
# Now create a dataframe from your data.
>>> pd.DataFrame(new_data)
0 1 2
0 0.44 0.50 0.10
1 0.85 0.63 0.11
答案 1 :(得分:1)
这可以使用字典(如果您需要保留列顺序,或者列名是字符串)。也许亚历山大会更新他的答案来解释这一点,我几乎可以肯定他会有比我提议的更好的解决方案:)
以下是一个例子:
from collections import defaultdict
a = [[(1,0.44),(2,0.5),(3,0.1)],[(2,0.63),(1,0.85),(3,0.11)]]
b = [[('A',0.44),('B',0.5),('C',0.1)],[('B',0.63),('A',0.85),('C',0.11)]]
首先是:
row_to_dic = [{str(y[0]): y[1] for y in x} for x in a]
dd = defaultdict(list)
for d in (row_to_dic):
for key, value in d.iteritems():
dd[key].append(value)
pd.DataFrame.from_dict(dd)
1 2 3
0 0.44 0.50 0.10
1 0.85 0.63 0.11
和b:
row_to_dic = [{str(y[0]): y[1] for y in x} for x in b]
dd = defaultdict(list)
for d in (row_to_dic):
for key, value in d.iteritems():
dd[key].append(value)
pd.DataFrame.from_dict(dd)
A B C
0 0.44 0.50 0.10
1 0.85 0.63 0.11