【问题标题】:Python3: how to select columns I want and avoid keyerror if they are absentPython3:如何选择我想要的列并在它们不存在时避免 keyerror
【发布时间】:2020-06-30 12:47:19
【问题描述】:

我有一些分类值

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

我通过 OneHotEncoding 将其编码为数值:

car dog pen bar
1   1   1   1

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

例如汽车狗笔而不是酒吧。

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

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

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

然后 Python 打印错误:

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

我该如何解决这个问题:

  1. 拥有我想要的列
  2. 在我想要的列不存在时避免错误

【问题讨论】:

  • 您提到“数据集”,因此您似乎指的是 Pandas。是这样吗?您能否展示您最初是如何创建 dataset 以便您的问题可重现的?

标签: python python-3.x machine-learning categorical-data one-hot-encoding


【解决方案1】:

您可以进行一些健全性检查。一个例子是下面的函数:

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

如你所见,它返回一个包含两个元素的元组:

  1. 仅现有列所需的数据集,否则返回 None(因此您可以检查结果中的 None 以避免错误)。
  2. 未找到的列列表(供您记录)。否则,如果全部找到,则返回 None。

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

【讨论】:

  • Yahya,非常感谢您提供的出色功能。这正是我所需要的。
  • 很高兴我能帮上忙 :)
  • Yahya,根据您的功能 I 1)创建数据集中所需列的列表 2)使用此列表进行选择:[col for col in col_calc if col in df.columns ]
【解决方案2】:

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

【讨论】:

  • Akshat2249,非常感谢。事实上,有很多列我不想使用。定义我不想使用的列会更难,然后我想使用。而且我不想用的栏目也可以不缺不缺。这取决于数据集的大小。
猜你喜欢
  • 2017-11-16
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多