2016-04-03 15 views
1

を用いた数値列を正規化し、私はPythonのデータフレームの列を正規化するために、次のコードを使用しようとしましたPythonのデータフレーム:</p> <pre><code>df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) </code></pre> <p>が、次のエラーを得た:ラムダ

df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) 
AttributeError: ("'float' object has no attribute 'mean'", u'occurred at index 0') 

は誰もい私がここで逃したものを知っている?ありがとう!

+0

サンプルデータセット(5-7行)と予想される出力を提供できますか? – MaxU

答えて

0

私はあなたが使用していると仮定していますパンダ

データフレーム全体に適用するのではなく、Series 'X'にのみ適用する(Documentation)、平均値、最大値、および最小値をあらかじめ計算する必要があります。このような何かを:

avg = df['X'].mean() 
diff = df['X'].max() - df['X'].min() 
new_df = df['X'].apply(lambda x: (x-avg)/diff) 

あなたは全体のデータフレームのチェックを正常化するために探しているなら、このanswer

df.apply(lambda x: (x - np.mean(x))/(np.max(x) - np.min(x))) 
0

あなたが列Xの値を正規化する場合:

df['x_norm'] = df.X.div(df.X.sum()) 

ステップバイステップ:

In [65]: df 
Out[65]: 
    a b X 
0 2 1 5 
1 1 4 5 
2 7 4 7 
3 1 6 6 
4 5 5 8 
5 5 8 2 
6 6 7 5 
7 8 2 5 
8 7 9 9 
9 9 6 5 

In [68]: df['x_norm'] = df.X.div(df.X.sum()) 

In [69]: df 
Out[69]: 
    a b X x_norm 
0 2 1 5 0.087719 
1 1 4 5 0.087719 
2 7 4 7 0.122807 
3 1 6 6 0.105263 
4 5 5 8 0.140351 
5 5 8 2 0.035088 
6 6 7 5 0.087719 
7 8 2 5 0.087719 
8 7 9 9 0.157895 
9 9 6 5 0.087719 

チェック:

関連する問題