将python迭代器输出转换为pandas数据帧的最快方法

我有一个生成器,它返回我想要转换为索引的pandas数据帧的未知数量的数据行.我所知道的最快的方法是将CSV写入磁盘,然后通过’read_csv’解析.我知道创建一个空数据帧然后不断追加新行是没有效率的.我无法创建预先调整大小的数据帧,因为我不知道将返回多少行.有没有办法将迭代器输出转换为pandas数据帧而无需写入磁盘?

解决方法:

迭代地附加到pandas数据帧并不是最好的解决方案.最好将数据构建为列表,然后将其传递给pd.DataFrame.

import random
import pandas as pd

alpha = list('abcdefghijklmnopqrstuvwxyz')

这里我们创建一个生成器,用它来构造一个列表,然后将它传递给dataframe构造函数

%%timeit
gen = ((random.choice(alpha), random.randint(0,100)) for x in range(10000))
my_data = [x for x in gen]
df = pd.DataFrame(my_data, columns=['letter','value'])

# result: 1 loop, best of 3: 373 ms per loop

这比创建生成器,构造空数据帧和追加行要快得多,如下所示:

%%timeit
gen = ((random.choice(alpha), random.randint(0,100)) for x in range(10000))
df = pd.DataFrame(columns=['letter','value'])
for tup in gen:
    df.loc[df.shape[0],:] = tup

# result: 1 loop, best of 3: 13.6 s per loop

这在构造10000行的13秒内非常慢.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐