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

Python:从含字符串、NaN与整数的分散数据中提取每行最大值

解决DataFrame混合类型列每行找最大值的问题

嘿,我完全懂你的困扰——当DataFrame里混着字符串、NaN和数值的时候,直接调用max(axis=1)肯定会翻车,毕竟Python没法把字符串和数字放在一起比大小。咱们一步步来搞定这个问题:

第一步:先清理数值列里的非数值内容

你的数据里不仅team是字符串,看起来部分数值列(比如示例里的sf列出现了NYN)也混进了字符串。首先得把这些目标列统一转换成数值类型,没法转换的内容就强制变成NaN,这样后续计算就不会触发类型错误了。

可以用pd.to_numeric()配合errors='coerce'参数实现,这个参数会自动把非数值内容转成NaN:

# 指定需要处理的数值列(排除team这类明确是字符串的列)
target_cols = ['so', 'ibb', 'hpb', 'sh', 'sf', 'gidp']
# 将目标列批量转换为数值类型,非数值内容转为NaN
df[target_cols] = df[target_cols].apply(pd.to_numeric, errors='coerce')

第二步:计算每行的最大值

现在所有目标列都是数值类型了(NaN属于数值类型范畴),这时候再用max(axis=1)就完全没问题了,它会自动忽略每行里的NaN值:

# 新增max列,存储每行的最大值
df['max'] = df[target_cols].max(axis=1)

额外小技巧:不想修改原数据的话?

要是你不想改动原DataFrame的列类型,可以用临时转换的方式一步到位:

df['max'] = df[target_cols].apply(lambda col: pd.to_numeric(col, errors='coerce')).max(axis=1)

这样处理后,不管是原本的NaN还是被转成NaN的字符串,都会被max函数忽略,最终得到每行的数值最大值。

内容的提问来源于stack exchange,提问作者Iwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:10