小编Tov*_*ino的帖子

从冗长的字典生成Pandas DataFrame.from_dict()时性能较差

在我的Python应用程序中,我发现使用字典词典作为构建稀疏熊猫DataFrame的源数据非常方便,然后将其用于sklearn中训练模型。

字典的结构如下:

data = {"X": {'a': 1, 'b': 2, 'c': 3}, "Y": {'d': 4, 'e': 5, 'f': 6}, "Z": {'g': 7, 'h': 8, 'i': 9}}

理想情况下,我想将其转换为这样的数据框:

df = pandas.DataFrame.from_dict(data, orient="index").fillna(0).astype(int)

哪个生成此:

e d f a c b i h g X 0 0 0 1 3 2 0 0 0 Y 5 4 6 0 0 0 0 0 0 Z 0 0 0 0 0 0 9 8 7

现在,这是我的问题。我的数据有成百上千的行数(即,外部字典中的键数)。这些中的每个仅具有与之相关联的少数列(即,每个内部字典中的键数),但是列总数为数千。我发现使用from_dict生成DataFrame的速度非常慢,对于200,000行和6,000列,大约需要2.5-3分钟。

此外,在行索引是MultiIndex(即,代替X,Y和Z的外部方向键为元组)的情况下,from_dict甚至更慢,对于200,000行,大约为7分钟以上。我发现如果避免使用字典列表而不是字典列表,然后使用set_index将MultiIndex添加回生成的DataFrame中,则可以避免这种开销。

总之,您如何建议我处理这个问题?库开发人员可以明显提高MultiIndex的性能,但是我在这里使用错误的工具吗?如果写入磁盘,则DataFrame的大小约为2.5GB。在大约2分钟左右的时间内从磁盘读取2.5GB的文件似乎是正确的,但是从理论上讲,我的数据在内存中的稀疏性应该可以使其速度更快。

python dictionary sparse-matrix dataframe pandas

6
推荐指数
1
解决办法
1178
查看次数

标签 统计

dataframe ×1

dictionary ×1

pandas ×1

python ×1

sparse-matrix ×1