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

检查DataFrame各列元素类型是否一致时触发KeyError问题求助

检查DataFrame各列元素类型是否一致时触发KeyError问题求助

嘿,我来帮你拆解下这个问题~

你碰到的KeyError: 155,核心原因是混淆了pandas的标签索引和位置索引:

你用range(0, len(df))生成的是「位置序号」,但df[column][i]是在按标签索引取值——也就是说pandas会去查找该列索引中等于i的标签,而不是直接取第i个位置的元素。如果你的DataFrame索引不是连续的整数(比如之前删过行、或者索引是字符串/非连续整数类型),当循环到i=155时,你的索引里没有这个标签,自然就抛出KeyError了。

至于你单独测试时没问题,大概率是因为你选的i刚好是索引中存在的标签,没碰到缺失的情况而已。

解决方法

方法1:改用位置索引取值

把df[column][i]改成df[column].iloc[i],iloc是专门按位置索引的方法,不管你的DataFrame索引是什么类型,都能准确取到第i个位置的元素:

a = 0
first_object = df.iloc[0]  # 这里也建议改成iloc[0],确保取第一行的位置,而非标签为0的行
for column in df:
    for i in range(len(df)):
        if type(df[column].iloc[i]) != type(first_object[column]):
            a += 1
print(a)

方法2:用pandas原生方法简化代码(更高效)

其实完全不用写嵌套循环,pandas的apply方法可以帮你更简洁、高效地完成检查:

# 检查每列所有元素类型是否和第一行元素类型一致
type_consistent = df.apply(lambda col: all(type(x) == type(col.iloc[0]) for x in col))
# 输出类型不一致的列
print("类型不一致的列:", type_consistent[type_consistent == False].index.tolist())
# 统计类型不一致的元素总数
total_inconsistent = sum(df.apply(lambda col: sum(type(x) != type(col.iloc[0]) for x in col)))
print("类型不一致的元素总数:", total_inconsistent)

这种方式不仅避免了索引问题,还利用了pandas的向量化操作,比嵌套循环快得多,尤其是当DataFrame规模较大时。

备注:内容来源于stack exchange,提问作者data_student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:29:08