用熊猫替换其列的平均值



我有一个csv文件,其中包含多个包含数值的列。但是,有些行在一列或多列中缺少值。缺少的值用"x"表示。

如何使用Pandas将所有缺失的值('x'(替换为其列中所有值的平均值?

df=  pd.read_csv('file.csv')

首先要识别的是,其中包含"x"的列不是整数数据类型。它们是对象数据类型。

df = pd.read_csv('file.csv')
df
Col1    Col2
0   1   22
1   2   44
2   3   x
3   4   88
4   5   110
5   6   132
6   7   x
7   8   176
8   9   198
9   10  x
df.dtypes
Col1     int64
Col2    object
dtype: object

为了获得Col2的平均值,需要将其转换为数值。

df['Col2'] = pd.to_numeric(df['Col2'], errors='coerce').astype('Int64')
df.dtypes
Col1    int64
Col2    Int64
dtype: object

df现在看起来是这样的:

df 
Col1    Col2
0   1   22
1   2   44
2   3   <NA>
3   4   88
4   5   110
5   6   132
6   7   <NA>
7   8   176
8   9   198
9   10  <NA>

现在我们可以将fillna((与df['Col2'].mean((一起使用:

df['Col2'] = df['Col2'].fillna(df['Col2'].mean())
df
Col1    Col2
0   1   22
1   2   44
2   3   110
3   4   88
4   5   110
5   6   132
6   7   110
7   8   176
8   9   198
9   10  110
avg = df[column].mean()
df[column] = df[column].apply(lambda v: avg if v=="x" else v)

在计算具有非数值(如"x"(的列的平均值时会遇到问题。您必须首先解决此问题,例如使用df = df.replace('x',np.nan)(仅当x是唯一的非数字值时才有效(,然后才能使用df = df.fillna(df.mean())。如果您从整数开始,其中包含x的列将被转换为浮点(即使是未被替换的行(,所以如果您不希望这样,您将不得不做更多的工作。

最新更新