0

パンダで一連のデータを平均化しようとしています。csv ファイルからのデータ。「トラック」というシリーズがあります。以前の段階で、このメソッドdropna()を使用して、csv ファイルを読み取ったときにインポートされたいくつかの空白行を取り除きました。

列の5行以上を平均したい方法を使用します。現在の値の前の 2 行、現在の値、および現在の値の後の 2 行を使用して平均を取りたいため、rolling_mean メソッドは使用できません。

ラベルも同様に NaN データが削除されたデータに到達すると、問題が発生します。

def get_data(filename):
    '''function to read the data form the input csv file to use in the analysis'''
    with open(filename, 'r') as f:
        reader = pd.read_csv(f, sep=',', usecols=('candidate',' final track' ,' status'))                      
    print reader[0:20]            
    reader=reader.dropna()
    print reader[0:20]
    return reader 

def relative_track(nb):

    length= len(reader) 
    track=current_tracks.loc[:,' final track']
    for el in range(2, length):
        means=pd.stats.moments.rolling_mean(track, 5)
        print means

これにより、出力が得られます(15、16のメモラベルは2番目の印刷では欠落しています):

                candidate   final track  status
0                       1           719       *
1                       2           705       *
2                       3           705       *
3                       4           706       *
4                       5           704       *
5                       1           708       *
6                       2           713       *
7                       3           720       *
8                       4           726       *
9                       5           729       *
10                      1           745       *
11                      2           743       *
12                      3           743       *
13                      4           733       *
14                      5           717       *
15                    NaN           NaN     NaN
16  *** Large track split           NaN     NaN
17                      1           714       *
18                      2           695       *
19                      3           690       *
   candidate   final track  status
0          1           719       *
1          2           705       *
2          3           705       *
3          4           706       *
4          5           704       *
5          1           708       *
6          2           713       *
7          3           720       *
8          4           726       *
9          5           729       *
10         1           745       *
11         2           743       *
12         3           743       *
13         4           733       *
14         5           717       *
17         1           714       *
18         2           695       *
19         3           690       *
20         4           671       *
21         5           657       *

しかし、2番目の関数を使用して平均を計算しようとすると、エラーが発生します:

    raise KeyError("stop bound [%s] is not in the [%s]" % (key.stop,self.obj._get_axis_name(axis)))
KeyError: 'stop bound [15] is not in the [index]'

これは、インデックス 15 がないためです。誰かがそれを助けることができれば、それは素晴らしいことです.

4

1 に答える 1

0

現在の値の前の 2 行、現在の値、および現在の値の後の 2 行を使用して平均を取りたいため、rolling_mean メソッドは使用できません。

ドキュメントのこのセクションのcenter=True最後に説明されているキーワード引数を使用します。

また、次のpd.stats.moments.rolling_meanように簡単にアクセスできますpd.rolling_mean。これは pandas のトップレベルの関数です。

PSここであなたの意図を理解したと思いますが、あなたのコードには質問とは関係のない問題があるかもしれません. (たとえばel、最後の for ループのカウント変数は使用されていません。同じことを繰り返し実行しているように見えます。) しかし、centerいずれにせよ、キーワードによって、既存の作業のほとんどが省略される可能性があります。

于 2013-09-26T13:09:18.593 に答える