Python 使用一行数据帧是否比使用一系列数据帧慢得多?

Python 使用一行数据帧是否比使用一系列数据帧慢得多?,python,pandas,dataframe,Python,Pandas,Dataframe,我遇到过一些遗留代码,其中数据存储为单行pd.DataFrame 我的直觉是,在这种情况下,使用pd.Series会更快-我不知道他们是如何进行优化的,但我知道他们可以并且可以这样做 我的直觉正确吗?或者对于大多数行为来说没有显著差异 (澄清一下——显然最佳实践不是单行数据帧,但我想问的是性能问题)是的,对于大量列,性能会受到显著影响。 你应该考虑一个数据文件< /COD>是一个代码< >代码> 。因此,当你对一行执行操作时,熊猫> /COD>必须在执行操作之前先合并所有列值。 即使对于100个

我遇到过一些遗留代码,其中数据存储为单行
pd.DataFrame

我的直觉是,在这种情况下,使用
pd.Series
会更快-我不知道他们是如何进行优化的,但我知道他们可以并且可以这样做
我的直觉正确吗?或者对于大多数行为来说没有显著差异

(澄清一下——显然最佳实践不是单行数据帧,但我想问的是性能问题)

是的,对于大量列,性能会受到显著影响。 你应该考虑一个<代码>数据文件< /COD>是一个代码< >代码> <代码>。因此,当你对一行执行操作时,<代码>熊猫> /COD>必须在执行操作之前先合并所有列值。 即使对于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)

数据类型呢?行中的所有项目都是相同的吗?为了我的目的,让我们假设它们是相同的(尽管我也对一般情况感兴趣),我是说一个是
10000
循环,其中一个是
1000
循环。@U9 Forward这与
timeit
有关,如果它检测到一个操作是否需要很长时间,则尝试限制循环的数量,如果某个操作冻结,则基本上停止10000次循环python@EdChum你是对的,没有理由只使用一行df,就像我说的,这是一些遗留代码,我想知道我是否应该担心。事实证明我应该@EdChum也一样-谢谢你的回答!这很有帮助。