質問: max(temp_a95pp) return (peak_max, a95pp, ptp) ``` ### 試したこと エラーコードについて検索した。 テストコードを描いて試してみた。 ### 補足情報(FW/ツールのバージョンなど) Python3.6 ご回答いただけましたら幸甚に存じます。
回答: ザッと見てみましたが、かなり問題が・・・ 順番に 【1】 hayataka2049さんが既に指摘しておりますが、 `peaks.append(wav.iloc[i:i+1].copy().abs())` の箇所は `peaks = peaks.append(wav.iloc[i:i+1].copy().abs())` ですね 【2】 `dif_peak = peaks.iloc[0:-1].copy()-peaks.iloc[1:].copy()` の箇所ですが、Series同士の引き算では同じIndexでの引き算となるので、結果全ての値が0となってしまいます やるならば `dif_peak = peaks.diff(-1)[:-1]` で良いかと思います。 【3】 `peak_max = dif_peak.max()` の箇所ですが、負の値の無視されますがこれは問題ないのでしょうか?(仕様なのかもしれませんが) 【4】 `p2p.sort_index(ascending=False)` の箇所は 【1】と同じく `p2p = p2p.sort_index(ascending=False)` でしょうね。 【5】 上と同じ箇所で `p2p.sort_index(ascending=False)` ですが、ソートは Indexで行うのではなくValueで行うのでは?と思うのですが違いますかね? であれば `p2p = p2p.sort_values(ascending=False)` となります。 【6】 途中でいきなり出現する`temp` って何でしょう??? 更には `ptp`も不明です。これは`p2p`の間違いなのでしょうか? 【7】 `temp_a95pp = p2p[round(len(ptp)*0.95+0.5):]` の箇所ですが、`p2p`は降順に(多分)並んでおりますので、上方から95%以降のデータを抜き出すと下位5%のデータだけが残りませんかね??? ここは `temp_a95pp = p2p[round(len(p2p)*0.05+0.5):]` が正解なのではないでしょうか 【8】 あとは全体的にかなり冗長な気がします。 Pandasを使うのであればPandasっぽい記述ってのがありますので是非覚えてください。(【2】で挙げた`diff()`など) 例えば最初の `peaks`を求める箇所もループを使わずに groupby()を使ってかけば ``` peaks = wav[wav.groupby((wav*wav.shift(1)<0).cumsum()).apply(lambda d: d.abs().idxmax())] ``` の一行(わかりやすいように分割しても2・3行)で収まるコード量で記述できます。