Pandas按行取最大值报错‘str与float无法比较’,求解决方法
问题:计算DataFrame每行最大值时出现类型错误
原始DataFrame如下:
Server 1-Jun 6-Jun 1-jul Jul-10 ServerA 8 9 5 90 ServerB 100 10 9 90
需求是新增一列maximumval,存储每个Server对应所有月份列的最大值,期望结果:
Server 1-Jun 6-Jun 1-jul Jul-10 maximumval ServerA 8 9 5 90 90 ServerB 100 10 9 90 100
尝试执行以下代码时出现报错:
df['maximumval'] = df.max(axis=1)
报错信息:
'>=' no supported between instances of 'str' and 'float'
错误原因
这个错误说明你的DataFrame里同时存在字符串类型(Server列的文本值)和数值类型,调用max(axis=1)时,Python会尝试对整行所有元素做大小比较,但字符串和数值之间不支持>=这类比较操作,因此触发错误。
解决方法
只针对数值列(即月份相关的列)计算每行最大值,有两种常用方式:
- 排除非数值列(指定列名)
直接移除Server列后再计算最大值:
df['maximumval'] = df.drop('Server', axis=1).max(axis=1)
- 自动筛选数值类型列
通过select_dtypes筛选出所有数值类型的列,再计算最大值,适合列数较多的场景:
df['maximumval'] = df.select_dtypes(include=['number']).max(axis=1)
执行上述任意一种方法后,就能得到符合预期的DataFrame。
内容的提问来源于stack exchange,提问作者user1471980
相关产品推荐
相关产品推荐

