web-dev-qa-db-ja.com

パンダデータフレーム:nan値を列の平均で置き換える

私はほとんど実数で埋められたパンダDataFrameを持っています、しかしそれにはいくつかのnan値もあります。

nansを平均的な列数に置き換えるにはどうすればよいですか。

この質問はこれと非常によく似ています。 テンキーな配列:nanの値を列の平均で置き換える が、残念ながら、与えられた解決策はパンダのDataFrameではうまくいきません。

104
piokuc

DataFrame.fillna を使用すると、nanを直接埋めることができます。

In [27]: df 
Out[27]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3       NaN -2.027325  1.533582
4       NaN       NaN  0.461821
5 -0.788073       NaN       NaN
6 -0.916080 -0.612343       NaN
7 -0.887858  1.033826       NaN
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

In [28]: df.mean()
Out[28]: 
A   -0.151121
B   -0.231291
C   -0.530307
dtype: float64

In [29]: df.fillna(df.mean())
Out[29]: 
          A         B         C
0 -0.166919  0.979728 -0.632955
1 -0.297953 -0.912674 -1.365463
2 -0.120211 -0.540679 -0.680481
3 -0.151121 -2.027325  1.533582
4 -0.151121 -0.231291  0.461821
5 -0.788073 -0.231291 -0.530307
6 -0.916080 -0.612343 -0.530307
7 -0.887858  1.033826 -0.530307
8  1.948430  1.025011 -2.982224
9  0.019698 -0.795876 -0.046431

fillnaのdocstringは、valueはスカラまたは辞書であるべきだと言っていますが、Seriesでも機能するようです。辞書を渡したい場合は、df.mean().to_dict()を使用できます。

185
bmu

試してください:

sub2['income'].fillna((sub2['income'].mean()), inplace=True)
33
Ammar Shigri
In [16]: df = DataFrame(np.random.randn(10,3))

In [17]: df.iloc[3:5,0] = np.nan

In [18]: df.iloc[4:6,1] = np.nan

In [19]: df.iloc[5:8,2] = np.nan

In [20]: df
Out[20]: 
          0         1         2
0  1.148272  0.227366 -2.368136
1 -0.820823  1.071471 -0.784713
2  0.157913  0.602857  0.665034
3       NaN -0.985188 -0.324136
4       NaN       NaN  0.238512
5  0.769657       NaN       NaN
6  0.141951  0.326064       NaN
7 -1.694475 -0.523440       NaN
8  0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794

In [22]: df.mean()
Out[22]: 
0   -0.251534
1   -0.040622
2   -0.841219
dtype: float64

列ごとにその列の平均を適用して塗りつぶします

In [23]: df.apply(lambda x: x.fillna(x.mean()),axis=0)
Out[23]: 
          0         1         2
0  1.148272  0.227366 -2.368136
1 -0.820823  1.071471 -0.784713
2  0.157913  0.602857  0.665034
3 -0.251534 -0.985188 -0.324136
4 -0.251534 -0.040622  0.238512
5  0.769657 -0.040622 -0.841219
6  0.141951  0.326064 -0.841219
7 -1.694475 -0.523440 -0.841219
8  0.352556 -0.551487 -1.639298
9 -2.067324 -0.492617 -1.675794
20
Jeff
# To read data from csv file
Dataset = pd.read_csv('Data.csv')

# To divide input in X and y axis
X = Dataset.iloc[:, :-1].values
Y = Dataset.iloc[:, 3].values

# To calculate mean use imputer class

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)


 imputer = imputer.fit(X[:, 1:3])
    X[:, 1:3] = imputer.transform(X[:, 1:3])
9
Roshan jha

欠損値を平均値で補完したい場合、列ごとに移動したい場合、これはその列の平均値でのみ補完されます。これはもう少し読みやすいかもしれません。

sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))
8
Pranay Aryal

上記以外の他の選択肢は:

df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))

それは平均のための以前の応答よりもエレガントではありませんが、nullを他の列関数で置き換えたい場合はもっと短くなるかもしれません。

6
guibor

df.fillna(df.mean())を直接使用して、すべてのNULL値をmeanで埋めます。

あなたがその列の平均でnull値を埋めたいならば、あなたはこれを使うことができます

ここでx=df['Item_Weight']Item_Weightであると仮定します

ここで代入しています(xの平均値でxのnull値をxに埋めます)

df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))

Null値を何らかの文字列で埋めたい場合は、

ここでOutlet_sizeは列名です

df.Outlet_Size = df.Outlet_Size.fillna('Missing')
4
Sunny Barnwal

Pandas:NaN(nan)の値を平均値、平均値、または他の1列の統計値に置き換える方法

DataFrameがdfで、nr_itemsという列が1つあるとします。これは、次のとおりです。df['nr_items']

あなたが置換する the NaNあなたの列df['nr_items']の値を列の平均に置き換えたい場合:

メソッド.fillnaを使う:

mean_value=df['nr_items].mean()
df['nr_item_ave']=df['nr_items].fillna(mean_value)

dfの値を列のNaNの値で置き換えて、新しい列を格納するためのnr_item_aveという新しいmean列を作成しました。

meanを使用するときは注意が必要です。 外れ値がある場合はmedianを使用することをお勧めします。

2
pink.slash