DataFrame中object类型列MINUTOS筛选超15分钟球员失效如何解决
为什么之前的筛选完全不生效
MINUTOS列当前是object类型,本质存储的是字符串文本,不是可计算的数值。Python对字符串做大小比较时,是逐位比对字符的编码值,根本不会按照数值大小判断,会出现比如"9" > "15"这类完全不符合实际的判断结果,这就是之前用.loc等各类筛选方法拿不到正确结果的核心原因。
具体解决流程
- 第一步:把MINUTOS列转成可计算的数值类型
通用转换代码,适配绝大多数带脏值的实战场景:
这里加df['MINUTOS'] = pd.to_numeric(df['MINUTOS'], errors='coerce')errors='coerce'的作用是:遇到空字符串、特殊标记这类没法转成数字的内容时,自动转成缺失值NaN,不会因为个别异常值让整个转换流程报错中断。 - 第二步:正常执行筛选
转换完成后列已经变成数值类型,直接用条件筛选就能得到正确结果:# 提取出场时长大于15分钟的所有球员数据 target_df = df[df['MINUTOS'] > 15]
特殊存储格式的适配方案
如果你的MINUTOS列存的是像"18:32"这类“分钟:秒”格式的文本,没法直接用通用方法转数值,就加个自定义处理逻辑拆分提取分钟数:
def parse_minute(raw_value): if pd.isna(raw_value): return None # 按冒号拆分文本,取冒号前的分钟部分转为浮点数 return float(str(raw_value).split(':')[0]) df['MINUTOS'] = df['MINUTOS'].apply(parse_minute) # 处理完成后执行上面的筛选逻辑即可
内容的提问来源于stack exchange,提问作者Sebastian Villalba
相关产品推荐
相关产品推荐

