Pandas DataFrame索引错误:缺失列引发KeyError问题求助
解决Pandas选择缺失列触发KeyError的方案
当无法提前知晓CSV文件中哪些目标列存在时,直接按列名选择会因缺失列触发KeyError,以下两种实用方案可以解决这个问题:
方法一:先筛选存在列,再补全缺失列
先从目标列列表里筛选出DataFrame实际存在的列,选择后再为缺失的列添加默认值,同时保证最终列顺序和目标一致:
def limit_rubric1(df): target_cols = ["Company", "RUB 1", "RUB 2", "RUB 3", "FileBase"] # 筛选当前DataFrame中存在的目标列 existing_cols = [col for col in target_cols if col in df.columns] # 选择存在的列并填充空值 limit_df = df[existing_cols].fillna(value=0) # 为缺失的列添加并填充0 for col in set(target_cols) - set(existing_cols): limit_df[col] = 0 # 重置列顺序为目标列的顺序 limit_df = limit_df[target_cols] return limit_df
方法二:使用reindex简化操作
Pandas的reindex方法可以直接按指定列名生成新DataFrame,不存在的列会自动创建并填充NaN,再配合fillna统一填充0,代码更简洁:
def limit_rubric1(df): target_cols = ["Company", "RUB 1", "RUB 2", "RUB 3", "FileBase"] # 按目标列重新索引,缺失列自动生成,随后填充所有空值为0 limit_df = df.reindex(columns=target_cols).fillna(value=0) return limit_df
两种方法都能避免KeyError:方法二更适合统一填充默认值的场景;如果需要对原存在列的空值和缺失列的默认值做不同处理,方法一更灵活。
内容的提问来源于stack exchange,提问作者Tralala
相关产品推荐
相关产品推荐

