高效Pandas数据帧ins

2024-09-29 01:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图添加浮点值,比如[[(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矩阵包含大约10000x1000个元素,因此我的方法需要很长时间。有没有其他可能加快速度?在

(不幸的是,列表中的值不是按第一个元组元素排序的)


Tags: 数据keyin元素pandasdfforvalue
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

这可以使用字典(如果需要保留列顺序,或者列名是字符串)。也许亚历山大会更新他的答案来解释这一点,我几乎肯定他会有比我提议的更好的解决方案:)

下面是一个例子:

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)]]

首先是:

^{pr2}$

和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

相关问题 更多 >