我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
我有一个熊猫DataFrame填充大部分实数,但有一些nan值在它以及。
我怎么能把这些nan替换成它们所在列的平均值呢?
这个问题与下面这个问题非常相似:numpy array:用列的平均值替换nan值,但不幸的是,这里给出的解决方案不适用于pandas DataFrame。
当前回答
# 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])
其他回答
Pandas:如何将NaN (NaN)值替换为一列的平均值(平均值)、中位数或其他统计数据
假设你的DataFrame是df,你有一列叫做nr_items。这是:df['nr_items']
如果你想用列的平均值替换你的列df['nr_items']的NaN值:
使用方法.fillna():
mean_value = df [' nr_items '] .mean () df [' nr_item_ave '] = df (' nr_items '] .fillna (mean_value)
我已经创建了一个名为nr_item_ave的新df列来存储新列,其中NaN值被该列的平均值替换。
你在使用平均数时要小心。如果你有异常值,更推荐使用中位数
除此之外,还有一种选择:
df = df.groupby(df.columns, axis = 1).transform(lambda x: x.fillna(x.mean()))
它没有之前的mean响应那么优雅,但如果您希望用其他列函数替换null,那么它可以更短。
如果你想用均值来替换缺失的值你想一列一列地替换,那么这个只会替换那一列的均值。这可能更容易读。
sub2['income'] = sub2['income'].fillna((sub2['income'].mean()))
直接使用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')
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