【问题标题】:Why can the numpy method work on pandas dataframes? [duplicate]为什么 numpy 方法可以在 pandas 数据帧上工作? [复制]
【发布时间】:2018-01-14 08:31:39
【问题描述】:

这更像是一个面向对象的问题。

我在 python 中使用 numpy 和 pandas。假设我将购物清单读入 pd 类型。现在我想找到所有东西的平均值。

data = pd.read_csv('shopping.csv')
prices = data['priceTag']

然后我尝试了两种方法来返回平均价格。看起来他们两个都工作得很好。

mean_price = prices.mean()
mean_price = np.mean(prices)

那为什么 np 方法可以作用于 pd 类型呢?

【问题讨论】:

  • .mean() 是 Pandas Dataframe 类的方法,而 np.mean() 是默认 Numpy 库的方法。不需要将参数传递给 pandas 对象,因为该方法作用于底层数据,而 Numpy 方法需要将对象传递给它。
  • @Q.Holness,我更新了我的问题,其实我想问一下,为什么 np 方法可以在 pd 类型上工作?

标签: python pandas oop numpy interface


【解决方案1】:

这里是numpy mean的源代码:

def mean(a, axis=None, dtype=None, out=None, keepdims=False):
"""
doc for function 

"""
if type(a) is not mu.ndarray:
    try:
        mean = a.mean
        return mean(axis=axis, dtype=dtype, out=out)
    except AttributeError:
        pass

return _methods._mean(a, axis=axis, dtype=dtype,
                      out=out, keepdims=keepdims)

实际上当你调用 np.mean(data) 时,你调用的是 data.mean()

【讨论】:

  • 我相信这是正确的答案。调用 np.array 将使 DataFrame 成为一个 numpy 数组。
【解决方案2】:

来自numpy documentation

a : array_like 包含需要均值的数字的数组。如果一个是 不是数组,会尝试转换。

特别阅读第二句。如果a 已经不是numpy array,则numpy mean 函数将尝试调用np.array(a)

【讨论】:

    猜你喜欢
    • 2018-06-02
    • 2019-09-25
    • 2013-09-28
    • 2019-06-18
    • 1970-01-01
    • 2018-06-05
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多