用列的中值替换 python 数据框中列中的所有 0 会将数据类型更改为 'O'

Replacing all 0s in a column in python dataframe with column's median value changes datatype to 'O'

我有一个大型 pandas 数据框,其中包含 10000 行和 33 列。 其中一列是 'Age',它具有数据类型 'int64' 和大量缺失值。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 33 columns):
customer                      10000 non-null int64
age                          10000 non-null int64

缺失值已在数据中记录为0。缺失值:

 df['customer'][df[' age']==0].count()
 >2942

我正在尝试将所有此类 0 替换为中值:

df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)

这似乎 运行 不错。但是它将列的数据类型更改为 O:

df[' age'].dtype
>dtype('O')

出了什么问题?

替换

df[' age'].replace(to_replace=0, value = df[' age'].median, inplace = True)

df[' age'].replace(to_replace=0, value = df[' age'].median(), inplace = True)

这对我有用。

最好用 NaN 替换缺失数据,然后用中值填充那些 NaN 值。

否则你实际上是在考虑缺失数据来计算中位数

df = pd.DataFrame([0,1,2,3,], columns = ['data'])
df[df.data == 0] = np.nan
print(df)

   data
0   NaN
1   1.0
2   2.0
3   3.0

df.fillna(df.median())

   data
0   2.0
1   1.0
2   2.0
3   3.0