我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
当前回答
您可以简单地使用DataFrame。Fillna直接填充楠的:
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的文档字符串说value应该是标量或字典,然而,它似乎也适用于Series。如果你想传递一个字典,你可以使用df.mean().to_dict()。
其他回答
除此之外,还有一种选择:
df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))
它没有之前的mean响应那么优雅,但如果您希望用其他列函数替换null,那么它可以更短。
Try:
sub2['income'].fillna((sub2['income'].mean()), inplace=True)
直接使用df.fillna(df.mean())将所有空值填充为mean
如果你想用该列的平均值填充空值,那么你可以使用这个
假设x=df['Item_Weight']这里Item_Weight是列名
这里我们赋值(用x的均值填充x的空值)
df['Item_Weight'] = df['Item_Weight'].fillna((df['Item_Weight'].mean()))
如果你想用一些字符串填充空值,那么使用
这里Outlet_size是列名
df.Outlet_Size = df.Outlet_Size.fillna('Missing')
如果你想用均值来替换缺失的值你想一列一列地替换,那么这个只会替换那一列的均值。这可能更容易读。
sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))
# To read data from csv file
Dataset = pd.read_csv('Data.csv')
X = Dataset.iloc[:, :-1].values
# To calculate mean use imputer class
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])