即使列丢失,python切片也不会给出键错误

即使列丢失,python切片也不会给出键错误,python,pandas,object-slicing,Python,Pandas,Object Slicing,我有一个有10个键的熊猫数据框。如果我试图访问一个不存在的列,即使这样,它也会为此返回一个NaN。我期待着一个关键的错误。熊猫如何无法识别丢失的列 在下面的示例中,供应商id是dataframe中的有效列。数据集中缺少另一列 final_feature.ix[:,['vendor_id','this column is absent']] Out[1017]: vendor_id this column is absent 0 434236 N

我有一个有10个键的熊猫数据框。如果我试图访问一个不存在的列,即使这样,它也会为此返回一个NaN。我期待着一个关键的错误。熊猫如何无法识别丢失的列

在下面的示例中,供应商id是dataframe中的有效列。数据集中缺少另一列

final_feature.ix[:,['vendor_id','this column is absent']]
Out[1017]: 
  vendor_id  this column is absent
0    434236                    NaN

type(final_feature)
Out[1016]: pandas.core.frame.DataFrame
编辑1:已验证不存在空值

print (final_feature1.isnull().values.any())

对于me作品,请按
子集选择:

final_feature[['vendor_id','this column is absent']]
KeyError:“['此列不存在']不在索引中”


另外,
ix
在pandas的最新版本(
0.20.1
)中被弃用。

这是预期的行为,是由于该功能

如果您尝试使用
df['d']
df[['a','d']]
则会出现
键错误

实际上,您正在做的是重新编制索引,使用
ix
时该列不存在这一事实无关紧要,您只会得到一列
NaN
s

使用
loc
观察到相同的行为:

In [24]:
df.loc[:,['a','d']]

Out[24]:
          a   d
0 -1.164349 NaN
1  0.400116 NaN
2 -0.599496 NaN
3  0.186837 NaN
4  0.385656 NaN
当您不使用
ix
loc
并尝试使用
df['d']
为特定列或列列表编制索引时,除非您指定一个新列,否则此处不会放大:例如
df['d']=一些新的值

为了防止出现这种情况,您可以使用
isin
和以下列验证您的列表:

In [26]:
valid_cols = df.columns.isin(['a','d'])
df.ix[:, valid_cols]

Out[26]:
          a
0 -1.164349
1  0.400116
2 -0.599496
3  0.186837
4  0.385656

现在,您将只看到存在的列,另外,如果您拼写错误了任何列,那么它也将防止出现这种情况

是否应该说“['此列不存在']不在列中?数据帧的列是索引(沿轴1)。可能是的,但我认为索引和列缺少值是一个普遍错误-轴0上的索引是经典索引,轴1上的索引称为列。@您是正确的。默认值(轴=0)是传统的索引。但是,列也是索引,只是沿着数据框中的axis=1。@jezrael谢谢。非常感谢。您是否建议从代码中删除.ix的所有实例?拼写错误是我遇到这个问题的原因。它将一直工作到将来的某个版本,从版本0.20.1开始,它已被标记为不推荐使用,但仍然可以工作演示如何实现相同的行为,但该行为仍会发生,正如我用
loc
演示的那样,但对现有列使用
isin
将对此提供保护谢谢。我将保留该检查。
In [26]:
valid_cols = df.columns.isin(['a','d'])
df.ix[:, valid_cols]

Out[26]:
          a
0 -1.164349
1  0.400116
2 -0.599496
3  0.186837
4  0.385656