问题背景
在使用pandas时查询一份csv文件并进行缺失值处理,
处理缺失值时发现nan值以外的“?”标记数值,先将他变成nan值,然后使用fillna方法进行替换时报错
代码如下:
st = st.replace(to_replace='��',value=np.nan)
st2 = st1['close'].fillna(st1['close'].mean(),inplace=True)
st2
成功变成了nan值,但是在后面的fillna方法中报错
TypeError: unsupported operand type(s) for +: 'int' and 'str
处理问题
使用pd.info()方法查询各列的数据类型
st1.info()

由于错误值的存在,已经将整列的数据类型变成了object字符串类型,不能使用fillna()方法来替换
方法1:直接删除
# 6.2.3 不是缺失值nan,有默认标记的
st1 = st.replace(to_replace='��',value=np.nan)
st1.mean()
st1
# 2、在进行缺失值的处理
# 删除
st2 = st1.dropna()
st2

方法2:使用列数据类型转换方法
- astype(np.float)
给原数据增加个新列,把修改后的列赋值过去,删除旧列,或者直接用新列覆盖旧列
先看前者,增加新的列
st1['colse1'] = st1['close'].astype(np.float)
st1.info()

然后令旧的列等于该列即可,我们直接用新列覆盖旧列
# 6.2.3 不是缺失值nan,有默认标记的
st1 = st.replace(to_replace='��',value=np.nan)
# st1.mean()
st1.info()
# 2、在进行缺失值的处理
# 转整列格式
# 直接用新列覆盖旧列
st1['close'] = st1['close'].astype(np.float)
st1.info()

再使用fillna进行值的转换,修改成功
st1['close'].fillna(st1['close'].mean(),inplace=True)
st1

版权声明:本文为weixin_55579895原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。