我遇到了一些遗留代码,并将数据存储为单行pd.DataFrame
。
我的直觉是,在这种情况下使用pd.Series
会更快-我不知道他们如何进行优化,但是我知道他们可以并且可以这样做。
我的直觉正确吗?还是大多数动作没有明显差异?
(为澄清起见-最佳实践显然不是单行DataFrame,而是我在询问性能)
答案 0 :(得分:2)
是的,对于大量列,将对性能产生明显影响。
您应该考虑到DataFrame
是Series
的决定,因此在单行上执行操作时,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)