Python 什么';对数据帧中的所有值求和的最佳方法是什么?

Python 什么';对数据帧中的所有值求和的最佳方法是什么?,python,pandas,numpy,dataframe,sum,Python,Pandas,Numpy,Dataframe,Sum,我想出了这两种方法。有更好的吗 >>> 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 只是想确保我没有遗漏更明显的东西。为熊猫0.24更新+ 在0.24之前+ 是基础numpy数组 df.values.s

我想出了这两种方法。有更好的吗

>>> 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
只是想确保我没有遗漏更明显的东西。

为熊猫0.24更新+
在0.24之前+ 是基础numpy数组

df.values.sum()

是numpy sum方法,并且更快

添加一些数字以支持此操作:

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

因此,我们在我的机器上获得了20%的性能,仅用于系列求和

谢谢。我就是这么想的!是因为一个函数调用另一个函数而更快,还是有更根本的区别?@kuanb有两个原因。第一,
df.values.sum()
是一个
numpy
操作,大多数情况下,
numpy
的性能更高。第二,
numpy
对数组中的所有元素求和,而不考虑维数
pandas
需要对
sum
进行两次单独的调用,每个维度调用一次。请小心,因为如果存在
nan
df.sum().sum()
将忽略
nan
并返回一个
float
,而
df.values.sum()
将返回
nan
。因此这两种方法并不等价。但是
df['a'].sum()
df['a'].to_numpy().sum()
相同吗?我想,
df['a'].sum()
只对列求和,不是吗?是的,这只是对单个序列信息的比较,我没有对整个dfOh求和。但是这个问题是关于整个数据帧的总和,而不是一个系列。你能报告你的pandas和numpy版本吗?在熊猫0.24.2和Numpy 1.16.2的测试中,我得到了更大的速度差。
df.values.sum()
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