2016-09-12 15 views
-2

私はカラム付きパンダdfを持っています、T max & T minです。次の列にT meanを計算します。私はこれでdf['T mean']= df[['T max','T min']].mean(axis=1)をしましたが、うまくいきませんでした。私はT maxT meanとしました。誰も私を助けることができますか?パンダデータフレームの行平均を計算する方法は?

+2

と連携するサンプルデータフレームを提供してください。 –

+3

生データ、コード、希望出力、誤った出力を投稿する – EdChum

答えて

1

数値の - typeの値がstringで、数値ではないと思います。だから、astypeでそれをキャストが必要です。

サンプル:

df=pd.DataFrame({'T max':[1,2,3],'T min':['5','6','7']}) 
print (df) 
    T max T min 
0  1  5 
1  2  6 
2  3  7 

print (type(df.ix[0,'T min'])) 
<class 'str'> 

df['T mean']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean 
0  1  5  1.0 
1  2  6  2.0 
2  3  7  3.0 

#cast column to int 
df['T min'] = df['T min'].astype(int) 

print (type(df.ix[0,'T min'])) 
<class 'numpy.int32'> 

df['T mean new']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean T mean new 
0  1  5  1.0   3.0 
1  2  6  2.0   4.0 
2  3  7  3.0   5.0 

astypeもしリターンエラー:

ValueError: invalid literal for int() with base 10: 'aaa'

それが列T min手段は、少なくとも一つの無効な値です。

サンプル:

df=pd.DataFrame({'T max':[1,2,3],'T min':['5','6','aaa']}) 
print (df) 
    T max T min 
0  1  5 
1  2  6 
2  3 aaa 

df['T mean']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean 
0  1  5  1.0 
1  2  6  2.0 
2  3 aaa  3.0 

#check invalid rows where is bad value in T min 
print (df[ pd.to_numeric(df['T min'], errors='coerce').isnull()]) 
    T max T min T mean 
2  3 aaa  3.0 

#replace invlid value to NaN 
df['T min'] = pd.to_numeric(df['T min'], errors='coerce') 

df['T mean new']= df[['T max','T min']].mean(axis=1) 
print (df) 
    T max T min T mean T mean new 
0  1 5.0  1.0   3.0 
1  2 6.0  2.0   4.0 
2  3 NaN  3.0   3.0 
+0

カラムをintにキャストしていました。ありがとうございました ! –

関連する問題