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

时间:2018-11-20 16:15:36

标签: python pandas replace types median

我有一个带有10000行和33列的大熊猫数据框。 列之一是“年龄”,其数据类型为“ int64”,并且缺失值相当大。

topic

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

<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

这似乎运行良好。但这会将列的数据类型更改为O:

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

出了什么问题?

2 个答案:

答案 0 :(得分:1)

最好用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

答案 1 :(得分:0)

替换

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

使用

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

对我有用。