Python3:如何 select 我想要的列并在它们不存在时避免出现键盘错误

Python3: how to select columns I want and avoid keyerror if they are absent

我有一些分类值

E.g. things = 'cat', dog', 'pen', 'bar'

我通过 OneHotEncoding 编码为数值:

car dog pen bar
1   1   1   1

我想使用数据集中的一些列。

例如车狗笔又不是吧。

我通过定义特定的列来做到这一点:

dataset = dataset[['car', 'dog', 'pen']]

但有时我想要的某些列在我的数据集中不存在,例如'car'

然后 Python 打印错误:

KeyError: "['car'] not in index"

我该如何解决问题:

  1. 获得我想要的列
  2. 避免我想要的列不存在时出现错误

您可以使用以下方式 dataset.iloc[:,dataset.columns!="bar"]

您可以做一些完整性检查。一个示例是以下函数:

def custom_dataset(dataset, req_cols):
    in_, out_ = [], []
    if isinstance(dataset, pd.DataFrame):  # optional
        for col in req_cols:  # check for every existing column
            if col in dataset.columns:
                in_.append(col)  # append those that are in (i.e. valid)
            else:
                out_.append(col)  # append those that are NOT in (i.e. invalid)
    return dataset[in_] if in_ else None, out_ if out_ else None

如您所见,它 return 是一个包含两个元素的元组:

  1. 仅现有列所需的数据集,否则它 returns None(因此您可以在结果上检查 None 以避免错误)。
  2. 未找到列的列表(供您记录)。否则如果都找到了,那就returns None.

即使数据集不是 DataFrame 的实例或者用户没有提供任何要收集的列,该函数也不会抛出错误,而是 return (None, None).