gpt4 book ai didi

python - Pandas:跨数据帧的列使用 DataFrame.apply() 和 Series.sum() 函数比调用 DataFrame.sum() 更快。为什么?

转载 作者:行者123 更新时间:2023-12-01 07:54:15 29 4
gpt4 key购买 nike

我没想到这个结果。如果有人能对此有所启发,我们将不胜感激。

代码

df = pd.DataFrame(np.random.randint(0,10,size=(100000, 4)), columns=list('ABCD'))

def test3():
df["A"].sum()
df["B"].sum()
df["C"].sum()
df["D"].sum()


def test4():
df.sum(axis=0)

def test5():
df.apply(lambda x: x.sum(), axis=0)


print(timeit.timeit(test3, number = 100))
print(timeit.timeit(test4, number = 100))
print(timeit.timeit(test5, number = 100))

输出

0.41974469999999997

0.8643757000000001

0.6898605

最佳答案

测试 3 作为 pd.Series 运行,它基本上是带有元数据的 numpy.arrays。 Numpy 数组的速度非常快。 test4 和 test5 在数据帧级别运行。仍然很快,但不如 pd.Series。

这是一个有趣的实验。创建一个包含大量数据的数据框。必须是两列。

df = pd.DataFrame(np.random.randn(5000000,2), columns= list('ab'))

现在,让我们创建两个相似但不同的列,第一个是数据框。

type(df[['a']])
pandas.core.frame.DataFrame

第二个是一个系列。

type(df['a'])
pandas.core.series.Series

两者都是完全相同的列,只是第一个是数据框,第二个是系列。

现在,让我们看看他们的表现:

数据框

%%time 
df[['a']].sum()
CPU times: user 108 ms, sys: 49.4 ms, total: 157 ms
Wall time: 68.8 ms

系列

%%time 
df['a'].sum()
CPU times: user 26.7 ms, sys: 17.9 ms, total: 44.6 ms
Wall time: 43.1 ms

这是一个非常显着的不同,pd.Series 的速度快了 4 倍。

最后,作为引用,如果我们将系列转换为 numpy 数组并运行它...

arr = np.array(df['a'].values)
%%time
arr.sum()
CPU times: user 4.25 ms, sys: 0 ns, total: 4.25 ms
Wall time: 3.34 ms

4.25 毫秒!!!当你想要真正快速处理丢失数据时,请尝试使用 numpy.array,它几乎总是会获胜。

这是一个 good article就此事。

关于python - Pandas:跨数据帧的列使用 DataFrame.apply() 和 Series.sum() 函数比调用 DataFrame.sum() 更快。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050376/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com