You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anaconda Spyder(Python)报错:无法对字符串执行一元负运算

解决TypeError: bad operand type for unary -: 'str'问题

这个错误的根源很清晰:你在执行-mydataset.iloc[:,6].values时,试图对字符串类型的数据使用一元负号(取反操作),而Python不允许对字符串做这个运算,所以抛出了类型错误。

为什么会出现这个情况?

当你用pd.read_csv()读取文件时,pandas会自动解析列数据类型,但如果第6列(注意pandas是从0开始索引,对应CSV里的第7列)包含非数值内容(比如空格、字母、特殊符号),或者格式不符合数值标准(比如用逗号代替小数点),这一列就会被识别为object类型(也就是字符串)。

一步步解决方法

  1. 先确认数据类型
    先跑一行代码检查各列的类型,确认第6列是不是字符串:

    print(mydataset.dtypes)
    

    如果对应列显示object,就坐实了是类型问题。

  2. 检查CSV文件内容
    打开wall_positions.csv,找到第7列(对应代码里的iloc[:,6]):

    • 看看有没有空值、多余空格或者字母/符号混在数值里
    • 确认数值的小数点是不是用的.,而不是,这类非标准分隔符
  3. 转换列数据类型
    确认这一列应该是数值后,用pd.to_numeric()把它转成数值类型,同时处理可能的错误值:

    # 转换第6列,无法转换的值会变成NaN,方便后续处理
    mydataset.iloc[:,6] = pd.to_numeric(mydataset.iloc[:,6], errors='coerce')
    # 顺便把后面要用到的列也一起转了,避免再出类似问题
    cols_to_convert = [7,8,9,10]
    for col in cols_to_convert:
        mydataset.iloc[:,col] = pd.to_numeric(mydataset.iloc[:,col], errors='coerce')
    

    转换后如果有NaN值,你可以选择删除这些行(mydataset = mydataset.dropna())或者填充默认值(比如mydataset = mydataset.fillna(0.0))。

  4. 提前指定类型读取(更高效的方式)
    下次读取CSV时,直接指定列的类型,避免自动解析出错:

    # 假设第6到10列都是浮点型,根据你的实际数据调整类型
    dtype_mapping = {6: float, 7: float, 8: float, 9: float, 10: float}
    mydataset = pd.read_csv('wall_positions.csv', dtype=dtype_mapping)
    

另外小建议:如果你的CSV有表头,用列名索引(比如mydataset['x_start'])会比iloc[:,6]更直观,不容易搞混列的位置~

内容的提问来源于stack exchange,提问作者deepakpawar.2310

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:14