我有一些分类值
E.g. things = 'cat', 'dog', 'pen', 'bar'
我通过OneHotEncoding将它们编码为数值:
car dog pen bar1 1 1 1
我想使用数据集中的一些列。
例如,car、dog、pen 而不是 bar。
我通过定义特定的列来实现:
dataset = dataset[['car', 'dog', 'pen']]
但有时我想要的某些列在数据集中不存在,例如 ‘car’
然后Python会打印错误:
KeyError: "['car'] not in index"
如何解决这个问题:
- 获得我想要的列
- 避免我想要的列不存在时的错误
回答:
你可以进行一些健全性检查。以下是一个示例函数:
def custom_dataset(dataset, req_cols): in_, out_ = [], [] if isinstance(dataset, pd.DataFrame): # 可选的 for col in req_cols: # 检查每个存在的列 if col in dataset.columns: in_.append(col) # 追加那些存在(即有效)的列 else: out_.append(col) # 追加那些不存在(即无效)的列 return dataset[in_] if in_ else None, out_ if out_ else None
如你所见,它返回一个包含两个元素的元组:
- 仅包含存在的列的数据集,如果没有找到任何列,则返回None(这样你可以检查结果是否为None以避免错误)。
- 未找到的列的列表(用于记录)。如果所有列都找到了,则返回None。
即使数据集不是DataFrame
的实例,或者用户没有提供任何要收集的列,该函数也不会抛出错误,而是返回(None, None)
。