diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 4654ceee9896b..8c504d35a3a4f 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -2552,7 +2552,11 @@ def dropna(self, axis=0, how='any', thresh=None, subset=None, agg_obj = self if subset is not None: ax = self._get_axis(agg_axis) - agg_obj = self.take(ax.get_indexer_for(subset),axis=agg_axis) + indices = ax.get_indexer_for(subset) + if -1 in indices : + bad_keys = [col for (col,idx) in zip(subset,indices) if idx==-1] + raise KeyError(bad_keys) + agg_obj = self.take(indices,axis=agg_axis) count = agg_obj.count(axis=agg_axis) diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index b4b8e4263ec78..26d0b0cd940e8 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -7183,6 +7183,8 @@ def test_dropna_corner(self): # bad input self.assertRaises(ValueError, self.frame.dropna, how='foo') self.assertRaises(TypeError, self.frame.dropna, how=None) + # non-existent column - 8303 + self.assertRaises(KeyError, self.frame.dropna, subset=['A','X']) def test_dropna_multiple_axes(self): df = DataFrame([[1, np.nan, 2, 3],