2017-07-28 6 views
1

によってはNaNを交換 -パンダ - 私はいくつかのNaNとのデータフレームがあると、非ヌル値の総計

import pandas as pd 
l = [{'C1':-6,'C3':2}, 
    {'C2':-6,'C3':3}, 
    {'C1':-6.3,'C2':8,'C3':9}, 
    {'C2':-7}] 
df1 = pd.DataFrame(l, 
    index=['R1','R2','R3','R4']) 
print(df1) 

    C1 C2 C3 
R1 -6.0 NaN 2.0 
R2 NaN -6.0 3.0 
R3 -6.3 8.0 9.0 
R4 NaN -7.0 NaN 

通報 -任意のNaN値は、任意の行のセル内に存在する場合、それを交換しなければなりません同じ行からのnull以外の値の集計によって示されます。 例えば、最初の行では、(R1、C2)の値であるべき=(-6 + 2)/ 2 = -2

期待出力 - プロセスのためaxis=1

 C1 C2 C3 
R1 -6.0 -4.0 2.0 
R2 -1.5 -6.0 3.0 
R3 -6.3 8.0 9.0 
R4 -7.0 -7.0 -7.0 

答えて

3

使用apply行によって:

df1 = df1.apply(lambda x: x.fillna(x.mean()), axis=1) 
print(df1) 

    C1 C2 C3 
R1 -6.0 -2.0 2.0 
R2 -1.5 -6.0 3.0 
R3 -6.3 8.0 9.0 
R4 -7.0 -7.0 -7.0 

も動作します:

df1 = df1.T.fillna(df1.mean(1)).T 
print(df1) 
    C1 C2 C3 
R1 -6.0 -2.0 2.0 
R2 -1.5 -6.0 3.0 
R3 -6.3 8.0 9.0 
R4 -7.0 -7.0 -7.0 

ので:

df1 = df1.fillna(df1.mean(1), axis=1) 
print(df1) 

NotImplementedError: Currently only can fill with dict/Series column by column

+1

適用機能を指してくれてありがとう。 – dataLeo

+1

非常に良い解決策。 – Dark

0

あなたはこれを行うことができます。トランスポーズした後、fillna()を再度トランスポーズしてください。

>>> df1 = df1.T.fillna(df1.mean(axis=1)).T 
>>> print(df1) 
    C1 C2 C3 
R1 -6.0 -4.0 2.0 
R2 -1.5 -6.0 3.0 
R3 -6.3 8.0 9.0 
R4 -7.0 -7.0 -7.0 
関連する問題