2017-10-13 14 views
1

私はこのようになりますパンダに「グラフ」という名前のシリーズがあります。選択欄

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を使って "Wavelength"列にアクセスできますが、次の列を取得してyとして割り当てることはできません。

私はilocとlocを使用しようとしましたが、まだ運がありませんでした。

お試しください。

+0

を行っている可能性があります。 –

答えて

3

xysavgol_filterにする必要はありません。 を渡すと自動的に渡される値はyである必要があります。あなたが欠けているのは、スムージングを定義するウィンドウサイズパラメータとポリゴン順序パラメータです。

  1. 誤解のいくつかの他のポイントに対処するために

    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


    pandas.Seriesませpandas.DataFrameです。 pandas.DataFrameは、pandas.Seriespandas.Seriesであると考えることができる。

  2. したがって、graph.indexと値がgraph.valuesの系列のインデックスにアクセスします。
  3. これはあなただけyがgraph`を= `を使用することができます` Series`あるのでまた

    import matplotlib.pyplot as plt 
    
    plt.plot(graph.index, savgol_filter(graph.values, 7, 3)) 
    

enter image description here

0

DataFrameではなくSeriesを使用しているため、一部のライブラリはインデックスにアクセスして列として使用できませんでした。
用途:

df = df.reset_index() 

それはあなたがsavgolフィルタ又はその他で使用できる追加の列にインデックスを変換します。

関連する問題