无法对DataFrame的MinTemp列分组更新,遇字符串与浮点数比较类型错误
解决
TypeError: '>' not supported between instances of 'str' and 'float'问题 这个报错的核心原因很明确:你的MinTemp列目前是字符串类型(object dtype),而你在条件判断里试图把它和浮点数(比如22.0、10.0)做比较,Python当然不允许字符串和数值直接比大小啦!
修复步骤:
先确认列的类型
先跑一行代码看看当前列的类型:print(data_mod['MinTemp'].dtype)如果输出是
object,那确实是字符串类型,需要先转换。将列转换为数值类型
使用pandas.to_numeric把列转成数值类型,同时处理可能存在的非数值数据(如果有的话):import pandas as pd data_mod['MinTemp'] = pd.to_numeric(data_mod['MinTemp'], errors='coerce')errors='coerce'会把无法转换成数值的内容变成NaN,如果你的数据里没有脏数据,也可以省略这个参数,但加上更稳妥。
重新执行分组逻辑
现在列是数值类型了,就可以正常执行你的分组代码了,另外注意最后用Counter的时候,要引用data_mod['MinTemp'],而不是直接写MinTemp(因为它不是全局变量):import numpy as np from collections import Counter col = 'MinTemp' conditions = [ data_mod[col] > 22.0, (data_mod[col] > 10.0) & (data_mod[col] <= 22.0), data_mod[col] <= 10.0 ] choices = [ 'mintp3', 'mintp2', 'mintp1' ] data_mod["MinTemp"] = np.select(conditions, choices, default='neutral') # 修正引用方式,指定DataFrame中的列 Counter(data_mod['MinTemp'])
额外提示:
如果转换后出现NaN值,np.select会把它们归到default='neutral'里,你可以根据需求决定怎么处理这些缺失值(比如提前用data_mod.dropna(subset=['MinTemp'])删掉,或者填充某个合理数值)。
内容的提问来源于stack exchange,提问作者FunLearning68
相关产品推荐
相关产品推荐

