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"
我该如何解决问题:
- 获得我想要的列
- 避免我想要的列不存在时出现错误
您可以使用以下方式
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 是一个包含两个元素的元组:
- 仅现有列所需的数据集,否则它 returns None(因此您可以在结果上检查 None 以避免错误)。
- 未找到列的列表(供您记录)。否则如果都找到了,那就returns None.
即使数据集不是 DataFrame
的实例或者用户没有提供任何要收集的列,该函数也不会抛出错误,而是 return (None, None)
.
我有一些分类值
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"
我该如何解决问题:
- 获得我想要的列
- 避免我想要的列不存在时出现错误
您可以使用以下方式
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 是一个包含两个元素的元组:
- 仅现有列所需的数据集,否则它 returns None(因此您可以在结果上检查 None 以避免错误)。
- 未找到列的列表(供您记录)。否则如果都找到了,那就returns None.
即使数据集不是 DataFrame
的实例或者用户没有提供任何要收集的列,该函数也不会抛出错误,而是 return (None, None)
.