从字典列表创建Pandas SparseDataFrame

7

我正在尝试将一组Python字典转换为Pandas DataFrame。由于每个字典具有不同的键,因此它占用了太多内存。由于大多数值都是NaN,在这种情况下使用SparseDataFrame应该很有帮助。

import pandas

df = pandas.DataFrame(keyword_data).to_sparse(fill_value=.0)

这种方法可以奏效,但会消耗大量内存,因为同时会创建一个DataFrame,有时会引发MemoryError的错误。
在不进行这一步的情况下,是否可能使用SparseDataFrame来处理这些数据?在这种情况下,Pandas文档并没有提供太多帮助。
pandas.SparseDataFrame(keyword_data, default_fill_value=.0)

错误信息:

类型错误: 输入类型不支持ufunc 'isnan',并且根据强制转换规则“safe”,输入不能安全地强制转换为任何受支持的类型


数据看起来像:

[{'a': 0.672366,
  'b': 0.667276,
  # ...
 },
 {'c': 0.507752,
  'd': 0.532593,
  'e': 0.507793
  # ...
 },
 # ...
]

字典中的键始终为字符串,每个字典具有不同的键,值为浮点数。

是否有一种方法可以直接从这些数据创建 SparseDataFrame,而无需经过常规的 DataFrame?


你打算用这个做什么? - Jeff
我试图在一个数据框中表示关键词数据,该数据框有很多列(大约比行多10倍)。我可能可以找到更好的方法来表示相同的数据,我只是想知道为什么 SparseDataFrame 构造函数不起作用,而 df.to_sparse() 却可以... - yprez
2
稀疏支持现在并不是很强,所以有很多未解决的问题。您可以使用SparseDataFrame,但必须给它提供一个键->系列的字典和一个已经汇总的索引(您可能需要直接构建SparseSeries以避免从密集到稀疏的转换)。 - Jeff
1个回答

1
截至pandas v1.0.0,SparseDataFrameSparseSeries被删除
不再需要它们。引用文档

使用具有稀疏值的Series或DataFrame而不是SparseSeries或SparseDataFrame没有性能或内存惩罚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接