首页 > 解决方案 > 用 scipy 和 pandas 在 python 中绘制山峰和山谷

问题描述

我想定位数据集中的所有峰和谷。我找到了一个可行的解决方案,但我不得不手动进入并将列标题更改为仅包含一个单词的名称。我不会制作一个可以处理多个不同 csv 文件的函数,并且更改所有文件上的列名很麻烦

我已经尝试将列标题设为变量,但熊猫不喜欢这样。我收到错误“AttributeError:'DataFrame' 对象没有属性'typ”。

这是什么工作,如果我手动将列名更改为“数据”。

 df = pd.read_csv(path,index_col=False).set_index('Timestamp')
    df = pd.DataFrame(df, columns=['Data'])

df['min'] = df.iloc[argrelextrema(df.Data.values, np.less_equal, order=n)[0]['Data']
    df['max'] = df.iloc[argrelextrema(df.Data.values, np.greater_equal, order=n)[0]]['Data']

这是我更想做的事情:

def peaks_valleys(path,typ,acc):

    df = pd.read_csv(path,index_col=False).set_index('Timestamp')
    df = pd.DataFrame(df, columns=[typ])

    n = acc #antall nummer sjekket før og etter

    df['min'] = df.iloc[argrelextrema(df.typ.values, np.less_equal, order=n)[0]][]typ
    df['max'] = df.iloc[argrelextrema(df.typ.values, np.greater_equal, order=n)[0]][typ]



标签: pythonpython-3.xpandasnumpyscipy

解决方案


Usingdf.typ与 相同df['typ'],因此它与 的值无关typ(这会提高AttributeError)。最好避免df.ColName; 而是使用df['ColName']哪个更安全。

此外,您可以使用 重命名列,或在使用.rename期间传递它们。read_csvnames=[...]

尝试:

def peaks_valleys(path,typ,acc):

    df = pd.read_csv(path,index_col=False, names=['Timestamp', typ]).set_index('Timestamp')  #assuming you have two columns, the first of which is the timestamp
    n = acc
    df['min'] = df.iloc[argrelextrema(df[typ].values, np.less_equal, order=n)[0]][typ]
    df['max'] = df.iloc[argrelextrema(df[typ].values, np.greater_equal, order=n)[0]][typ]

推荐阅读