即使列丢失,python切片也不会给出键错误
我有一个有10个键的熊猫数据框。如果我试图访问一个不存在的列,即使这样,它也会为此返回一个NaN。我期待着一个关键的错误。熊猫如何无法识别丢失的列 在下面的示例中,供应商id是dataframe中的有效列。数据集中缺少另一列即使列丢失,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
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