首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从pandas.Series中选择局部极小和最大值

从pandas.Series中选择局部极小和最大值
EN

Stack Overflow用户
提问于 2014-12-24 05:58:59
回答 3查看 10.2K关注 0票数 15

有一个scipy.signal.argrelextrema函数与ndarray一起工作,但是当我试图在pandas.Series上使用它时,它会返回一个错误。用在熊猫身上的正确方法是什么?

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd
from scipy.signal import argrelextrema
s = pd.Series(randn(10), range(10))
s
argrelextrema(s, np.greater)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-f3812e58bbe4> in <module>()
      4 s = pd.Series(randn(10), range(10))
      5 s
----> 6 argrelextrema(s, np.greater)

/usr/lib/python2.7/dist-packages/scipy/signal/_peak_finding.pyc in argrelextrema(data, comparator, axis, order, mode)
    222     """
    223     results = _boolrelextrema(data, comparator,
--> 224                               axis, order, mode)
    225     return np.where(results)
    226 

/usr/lib/python2.7/dist-packages/scipy/signal/_peak_finding.pyc in _boolrelextrema(data, comparator, axis, order, mode)
     60 
     61     results = np.ones(data.shape, dtype=bool)
---> 62     main = data.take(locs, axis=axis, mode=mode)
     63     for shift in xrange(1, order + 1):
     64         plus = data.take(locs + shift, axis=axis, mode=mode)

TypeError: take() got an unexpected keyword argument 'mode'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-24 07:23:14

你可能会像这样使用它,

代码语言:javascript
运行
复制
argrelextrema(s.values, np.greater)

您目前正在使用完整的熊猫系列,而ARRER极致期待一个和数组。s.values为您提供了nd.array

票数 22
EN

Stack Overflow用户

发布于 2019-11-28 01:42:41

尽管s.values仍然运行良好(Pandas0.25),但推荐的方法是:

代码语言:javascript
运行
复制
argrelextrema(s.to_numpy(), np.greater)
# equivalent to:
argrelextrema(s.to_numpy(copy=False), np.greater)

虽然也有一个s.array属性,但是在这里使用它将失败的有:TypeError: take() got an unexpected keyword argument 'axis'

注意:copy=False的意思是“不要强制复制”,但它仍然可能发生。

票数 2
EN

Stack Overflow用户

发布于 2020-05-26 20:50:34

当你的代码出现的时候,你的数组已经被熊猫读到了,所以你的数组应该变成numpy数组。因此,只需尝试通过np.array将数据帧更改为numpy数组即可。

代码语言:javascript
运行
复制
g = np.array(s) # g is new variable notation
argrelextrema(g, np.greater)

或以另一种形式

代码语言:javascript
运行
复制
g = np.array(s) # g is new variable notation
argrelextrema(g, lambda a,b: (a>b) | (a<b))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27632218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档