从熊猫系列

时间:2017-10-13 15:06:15

标签: python pandas series

我在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

我使用graph.plot()绘制曲线图,如下所示: enter image description here

目标是平滑曲线。我试图使用Savgol_Filter,但要做到这一点,我需要将我的系列分为x& y列。到目前为止,我可以使用graph.index访问“波长”列,但我无法抓住下一列将其指定为y。

我尝试过使用iloc和loc,但还没有运气。

尝试任何提示或新方向?

2 个答案:

答案 0 :(得分:3)

您不需要将xy传递给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()

enter image description here

解决其他一些误解问题

  1. graphpandas.Seriespandas.DataFramepandas.DataFrame可以被视为pandas.Series的{​​{1}}。
  2. 因此,您使用pandas.Series访问系列的索引,使用graph.index访问值。
  3. 您也可以完成

    graph.values
  4. enter image description here

答案 1 :(得分:0)

当您使用Series而不是DataFrame时,某些库无法访问索引以将其用作列。
使用:

df = df.reset_index()

它会将索引转换为可以在savgol过滤器或任何其他过滤器中使用的额外列。