如何通过列索引提取pandas DataFrame指定列中仅含数字的行
错误原因
你代码中df[[0]]的写法是尝试选取列名为0的列,而你的测试数据列名为SELECTIO、some_col,不存在名为0的列,因此触发KeyError。要按列的位置索引取值,需要用pandas的.iloc属性。
另外你原有逻辑还存在一个隐藏问题:列中存储的数字是int类型,本身没有isdigit()方法,直接调用会触发属性错误,需要先转为字符串再判断。
正确实现
方法1:沿用你的判断逻辑修改
res = df[df.iloc[:, 0].apply(lambda x: str(x).isdigit())] print(res)
运行输出:
SELECTIO some_col 1 37002 6 2 37003 14 4 37004 38 6 37005 60
方法2:更高效的向量化实现(适合数据量较大的场景)
不用逐行apply,直接用pandas内置方法处理,性能更高:
import pandas as pd res = df[pd.to_numeric(df.iloc[:, 0], errors='coerce').notna()]
这段代码逻辑是尝试将指定列的所有值转为数字,转换失败的值会被置为NaN,最后筛选出非NaN的行即可。
内容的提问来源于stack exchange,提问作者Habib Ur Rehman
相关产品推荐
相关产品推荐

