用scipy和pandas在python中绘制的峰谷

时间:2019-08-01 08:47:52

标签: python python-3.x pandas numpy scipy

我想定位数据集中的所有峰谷。我找到了一个可行的解决方案,但随后我不得不手动进入并将列标题更改为仅包含一个单词的名称。 我不会做一个可以处理几个不同的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]



1 个答案:

答案 0 :(得分:0)

使用df.typdf['typ']相同,因此它独立于typ的值(引起AttributeError的值)。最好避免使用df.ColName;而是使用更安全的df['ColName']

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

尝试:

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]