我在pandas中有一个名为'graph'的系列,如下所示:
Wavelength
450 37
455 31
460 0
465 0
470 0
475 0
480 418
485 1103
490 1236
495 894
500 530
505 85
510 0
515 168
520 0
525 0
530 691
535 842
540 5263
545 4738
550 6237
555 1712
560 767
565 620
570 0
575 757
580 1324
585 1792
590 659
595 1001
600 601
605 823
610 0
615 134
620 3512
625 266
630 155
635 743
640 648
645 0
650 583
Name: A1, dtype: object
目标是平滑曲线。我试图使用Savgol_Filter,但要做到这一点,我需要将我的系列分为x& y列。到目前为止,我可以使用graph.index访问“波长”列,但我无法抓住下一列将其指定为y。
我尝试过使用iloc和loc,但还没有运气。
尝试任何提示或新方向?
答案 0 :(得分:3)
您不需要将x
和y
传递给savgol_filter
。您只需要将y
传递给它时自动传递的graph
值。您缺少的是窗口大小参数和定义平滑的多边形顺序参数。
from scipy.signal import savgol_filter
import pandas as pd
# I passed `graph` but I could've passed `graph.values`
# It is `graph.values` that will get used in the filtering
pd.Series(savgol_filter(graph, 7, 3), graph.index).plot()
解决其他一些误解问题
答案 1 :(得分:0)
当您使用Series而不是DataFrame时,某些库无法访问索引以将其用作列。
使用:
df = df.reset_index()
它会将索引转换为可以在savgol过滤器或任何其他过滤器中使用的额外列。