我有一个带有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)
出了什么问题?
答案 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)
对我有用。