我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
当前回答
使用sklearn库预处理类
from sklearn.impute import SimpleImputer
missingvalues = SimpleImputer(missing_values = np.nan, strategy = 'mean', axis = 0)
missingvalues = missingvalues.fit(x[:,1:3])
x[:,1:3] = missingvalues.transform(x[:,1:3])
注意:在最近的版本中,missing_values参数值更改为np。nan源自nan
其他回答
除此之外,还有一种选择:
df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))
它没有之前的mean响应那么优雅,但如果您希望用其他列函数替换null,那么它可以更短。
您还可以使用value_counts来获取最频繁的值。这适用于不同的数据类型。
df = df.apply(lambda x:x.fillna(x.value_counts().index[0]))
下面是value_counts api引用。
使用sklearn库预处理类
from sklearn.impute import SimpleImputer
missingvalues = SimpleImputer(missing_values = np.nan, strategy = 'mean', axis = 0)
missingvalues = missingvalues.fit(x[:,1:3])
x[:,1:3] = missingvalues.transform(x[:,1:3])
注意:在最近的版本中,missing_values参数值更改为np。nan源自nan
Try:
sub2['income'].fillna((sub2['income'].mean()), inplace=True)
# 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])