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
相关产品推荐
相关产品推荐

