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类型(也就是字符串)。
一步步解决方法
先确认数据类型
先跑一行代码检查各列的类型,确认第6列是不是字符串:print(mydataset.dtypes)如果对应列显示
object,就坐实了是类型问题。检查CSV文件内容
打开wall_positions.csv,找到第7列(对应代码里的iloc[:,6]):- 看看有没有空值、多余空格或者字母/符号混在数值里
- 确认数值的小数点是不是用的
.,而不是,这类非标准分隔符
转换列数据类型
确认这一列应该是数值后,用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))。提前指定类型读取(更高效的方式)
下次读取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
相关产品推荐
相关产品推荐

