我有一个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
的列将被转换为浮点(即使是未被替换的行(,所以如果您不希望这样,您将不得不做更多的工作。