我想出了这两种方法。有更好的方法吗?
>>> import pandas as pd
>>> df = pd.DataFrame({'A': [5, 6, 7], 'B': [7, 8, 9]})
>>> print df.sum().sum()
42
>>> print df.values.sum()
42
只是想确保我没有漏掉什么更明显的东西。
df.to_numpy().sum()
df.values
底层的numpy数组是什么?
df.values.sum()
numpy的sum方法更快
df.values.sum()
是一个numpy
操作,通常情况下,numpy
更有效率。第二,numpy
会对数组中的所有元素进行求和,无论其维度如何。而pandas
需要分别对每个维度进行两次调用来实现求和。 - piRSquared为了支持这个观点,我们来加入一些数字:
import numpy as np, pandas as pd
import timeit
df = pd.DataFrame(np.arange(int(1e6)).reshape(500000, 2), columns=list("ab"))
def pandas_test():
return df['a'].sum()
def numpy_test():
return df['a'].to_numpy().sum()
timeit.timeit(numpy_test, number=1000) # 0.5032469799989485
timeit.timeit(pandas_test, number=1000) # 0.6035906639990571
因此,在我的机器上,仅对Series求和操作的性能提高了20%!
df['a'].sum()
和 df['a'].to_numpy().sum()
是一样的吗?我认为 df['a'].sum()
只会对列求和,不是吗? - Bill
nan
值,则df.sum().sum()
会忽略nan
并返回一个float
,而df.values.sum()
则返回nan
。因此这两种方法并不等价。 - Ramon Crehuet