是一行的数据帧,其处理速度比系列慢得多



我遇到了一些遗留代码,其中数据存储为单行pd.DataFrame
我的直觉是,在这种情况下,使用 pd.Series 会更快 - 我不知道他们如何进行优化,但我知道他们可以并且这样做。
我的直觉正确吗?还是大多数操作没有显着差异?
(澄清一下 - 显然最佳实践不是单行数据帧,但我问的是性能(

是的,

对于大量列,会对性能产生明显影响。您应该考虑到DataFrameSeries字典,因此当您对单行执行操作时,pandas必须先合并所有列值,然后再执行该操作。

即使对于 100 个元素,您也可以看到有一个命中:

s = pd.Series(np.random.randn(100))
df = pd.DataFrame(np.random.randn(1,100))
%timeit s.sum()
%timeit df.sum(axis=1)

104 µs ± 5.08 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
194 µs ± 2.8 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

在我看来,没有理由使用索引值与该df的列名相同的Series无法实现的单行 df

性能下降不是线性的,因为对于 10k 阵列,它不会差 2 倍:

s = pd.Series(np.random.randn(10000))
df = pd.DataFrame(np.random.randn(1,10000))
%timeit s.sum()
%timeit df.sum(axis=1)
149 µs ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
253 µs ± 36.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

相关内容

  • 没有找到相关文章

最新更新