遍历Pandas DataFrame遇KeyError,求筛选有效数据行的正确方法
问题解决:KeyError及有效数据行筛选方案
错误原因
你遇到的KeyError: 'live_updated'是因为列名引用错误:你的DataFramedf_live中不存在名为live_updated的列,实际对应的列名是live.updated(从你提供的DataFrame结构可确认)。另外,直接用!= "NaN"判断空值也是错误的——pandas中的NaN是特殊缺失值,不能和字符串"NaN"直接比较。
正确实现方案
方案1:高效向量化筛选(推荐)
利用pandas内置方法直接筛选有效行,避免低效的循环遍历:
import pandas as pd # 筛选live.updated不为空的有效行(对应示例中的96、97行) valid_live_rows = df_live[pd.notna(df_live["live.updated"])] # 输出结果 print(valid_live_rows)
如果需要筛选所有live相关列都不为空的行,可使用dropna方法:
# 丢弃所有live列全为空的行 valid_live_rows = df_live.dropna(how="all")
方案2:修正循环遍历(仅作参考,不推荐)
如果一定要用循环遍历,需修正列名和空值判断逻辑:
for index, row in df_live.iterrows(): # 用pd.notna判断当前行的live.updated是否非空 if pd.notna(row["live.updated"]): print(row) else: print("Not live")
关键注意点
- 列名必须严格匹配:DataFrame中的列名是
live.updated,不是live_updated - 缺失值判断:必须用
pd.notna()或pd.notnull(),不能直接和字符串"NaN"比较 - 性能优先:pandas的向量化操作(如布尔索引、dropna)比
iterrows循环效率高得多,处理大数据集时差距明显
内容的提问来源于stack exchange,提问作者thereiswaldo
相关产品推荐
相关产品推荐

