python使用pandas时替换列数据报错TypeError: unsupported operand type(s) for +: ‘int‘ and ‘str

问题背景

在使用pandas时查询一份csv文件并进行缺失值处理,

附上pandas学习网址

python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作,DataFrame运算,pandas画图,存储https://blog.csdn.net/weixin_55579895/article/details/120709917

处理缺失值时发现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版权协议,转载请附上原文出处链接和本声明。