具有一行的DataFrame是否比一系列的要慢得多?

时间:2019-06-06 08:25:19

标签: python pandas dataframe

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

1 个答案:

答案 0 :(得分:2)

是的,对于大量列,将对性能产生明显影响。 您应该考虑到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)

我认为没有理由使用Series不能达到单行df,其中索引值与该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)