创建大型Pandas DataFrame:预分配vs追加vs concat

创建大型Pandas DataFrame:预分配vs追加vs concat,第1张

创建大型Pandas DataFrame:预分配vs追加vs concat

您的基准实际上太小,无法显示出真正的差异。追加,每次复制,因此您实际上是在复制大小为N的存储空间N
*(N-1)次。随着数据框大小的增加,这效率极低。在很小的框架内,这当然可能无关紧要。但是,如果您有任何实际尺寸,这很重要。这在此处的文档中特别指出,尽管有点警告。

In [97]: df = Dataframe(np.random.randn(100000,20))In [98]: df['B'] = 'foo'In [99]: df['C'] = pd.Timestamp('20130101')In [103]: df.info()<class 'pandas.core.frame.Dataframe'>Int64Index: 100000 entries, 0 to 99999Data columns (total 22 columns):0     100000 non-null float641     100000 non-null float642     100000 non-null float643     100000 non-null float644     100000 non-null float645     100000 non-null float646     100000 non-null float647     100000 non-null float648     100000 non-null float649     100000 non-null float6410    100000 non-null float6411    100000 non-null float6412    100000 non-null float6413    100000 non-null float6414    100000 non-null float6415    100000 non-null float6416    100000 non-null float6417    100000 non-null float6418    100000 non-null float6419    100000 non-null float64B     100000 non-null objectC     100000 non-null datetime64[ns]dtypes: datetime64[ns](1), float64(20), object(1)memory usage: 17.5+ MB

追加中

In [85]: def f1():   ....:     result = df   ....:     for i in range(9):   ....:         result = result.append(df)   ....:     return result   ....:

卡特

In [86]: def f2():   ....:     result = []   ....:     for i in range(10):   ....:         result.append(df)   ....:     return pd.concat(result)   ....:In [100]: f1().equals(f2())Out[100]: TrueIn [101]: %timeit f1()1 loops, best of 3: 1.66 s per loopIn [102]: %timeit f2()1 loops, best of 3: 220 ms per loop

请注意,我什至都不会尝试预分配。它有些复杂,特别是因为您要处理多个dtypes(例如,您 可以
制作一个巨大的框架并且简单

.loc
并且可以工作)。但是
pd.concat
只是简单,可靠和快速。

并从上方选择尺寸

In [104]: df = Dataframe(np.random.randn(2500,40))In [105]: %timeit f1()10 loops, best of 3: 33.1 ms per loopIn [106]: %timeit f2()100 loops, best of 3: 4.23 ms per loop


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存