gpt4 book ai didi

python - 如何有效地从字典创建一个大而稀疏的数据框?

转载 作者:太空狗 更新时间:2023-10-30 01:33:55 24 4
gpt4 key购买 nike

我有一个很大但非常稀疏的矩阵(50,000 行 * 100,000 列,只有 10% 的值是已知的)。该矩阵的每个已知元素都是一个从 0.00 到 1.00 的 float ,这些已知值存储在 python 字典中,格式如下:

{'c1': {'r1':0.27, 'r3':0.45}, 
'c2': {'r2':0.65, 'r4':0.87} }

现在的问题是如何有效地从这个字典构造一个 pandas.DataFrame ?这里,效率包括内存使用和构建数据帧的时间。

对于内存使用,我希望通过 np.uint8 存储每个元素。因为已知值是从 0.00 到 1.00,而我只关心前 2 位数字,所以我可以通过乘以 100 将其转换为无符号 8 位整数。这可能会为此数据帧节省大量内存存储空间。

有什么办法吗?

最佳答案

dict 像:

{'c1': {'r1':0.27, 'r3':0.45}, 
'c2': {'r2':0.65, 'r4':0.87} }

... 最好转换成这样的规范化结构:

 level0    level1   value
c1 r1 0.27
c1 r3 0.45
c2 r2 0.65
c2 r4 0.87

...比这样的数据透视表:

      r1    r2    r3    r4
c1 0.27 nan 0.45 nan
c2 nan 0.65 nan 0.87

... 因为后者占用更多内存。

构建规范化结构的合理内存效率方式是:

input = {'c1': {'r1':0.27, 'r3':0.45}, 
'c2': {'r2':0.65, 'r4':0.87} }

result = []
for key, value in input.iteritems():
row = pd.Series(value).reset_index()
row.insert(0, 'key', key)
result.append(row)

pd.concat(result, ignore_index=True)

这导致:

  key index     0
0 c2 r2 0.65
1 c2 r4 0.87
2 c1 r1 0.27
3 c1 r3 0.45

关于python - 如何有效地从字典创建一个大而稀疏的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27563380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com