如何根据条目类型删除DataFrame指定列值为数字的行
报错原因
你原有代码中type(x['terms'])获取的是terms整列(即pandas.Series对象)的类型,并非列内单个元素的类型,type(x['terms']) is int的判断永远返回False,用布尔值直接索引DataFrame自然会触发KeyError。
修正方案
你需要逐行判断terms列元素的类型,筛选出非数字类型的行即可,推荐两种实现方式:
1. 布尔索引直接筛选保留合规行(更简洁)
# 仅排除Python原生的int、float类型 x = x[x['terms'].apply(lambda val: not isinstance(val, (int, float)))]
如果需要同时排除numpy封装的数值类型,可以扩展判断范围:
import numpy as np x = x[x['terms'].apply(lambda val: not isinstance(val, (int, float, np.number)))]
2. 按原有逻辑用drop方法删除不合规行
x = x.drop(x[x['terms'].apply(lambda val: isinstance(val, (int, float)))].index)
扩展适配场景
如果你的数据中存在字符串格式的数字(比如值为"123"的字符串)也需要删除,可以用如下自定义判断逻辑:
def is_numeric_type(val): # 先判断是否为原生/ numpy数值类型 if isinstance(val, (int, float, np.number)): return True # 再判断是否为可转成数字的字符串 if isinstance(val, str): try: float(val) return True except ValueError: return False return False x = x[~x['terms'].apply(is_numeric_type)]
内容的提问来源于stack exchange,提问作者Clement Attlee
相关产品推荐
相关产品推荐

