@@ -229,6 +229,85 @@ def test_frame_getitem_nan_multiindex(nulls_fixture):
229
229
tm .assert_frame_equal (result , expected )
230
230
231
231
232
+ @pytest .mark .parametrize (
233
+ "indexer,expected" ,
234
+ [
235
+ (
236
+ (["b" ], ["bar" , np .nan ]),
237
+ (
238
+ DataFrame (
239
+ [[2 , 3 ], [5 , 6 ]],
240
+ columns = MultiIndex .from_tuples ([("b" , "bar" ), ("b" , np .nan )]),
241
+ dtype = "int64" ,
242
+ )
243
+ ),
244
+ ),
245
+ (
246
+ (["a" , "b" ]),
247
+ (
248
+ DataFrame (
249
+ [[1 , 2 , 3 ], [4 , 5 , 6 ]],
250
+ columns = MultiIndex .from_tuples (
251
+ [("a" , "foo" ), ("b" , "bar" ), ("b" , np .nan )]
252
+ ),
253
+ dtype = "int64" ,
254
+ )
255
+ ),
256
+ ),
257
+ (
258
+ (["b" ]),
259
+ (
260
+ DataFrame (
261
+ [[2 , 3 ], [5 , 6 ]],
262
+ columns = MultiIndex .from_tuples ([("b" , "bar" ), ("b" , np .nan )]),
263
+ dtype = "int64" ,
264
+ )
265
+ ),
266
+ ),
267
+ (
268
+ (["b" ], ["bar" ]),
269
+ (
270
+ DataFrame (
271
+ [[2 ], [5 ]],
272
+ columns = MultiIndex .from_tuples ([("b" , "bar" )]),
273
+ dtype = "int64" ,
274
+ )
275
+ ),
276
+ ),
277
+ (
278
+ (["b" ], [np .nan ]),
279
+ (
280
+ DataFrame (
281
+ [[3 ], [6 ]],
282
+ columns = MultiIndex (
283
+ codes = [[1 ], [- 1 ]], levels = [["a" , "b" ], ["bar" , "foo" ]]
284
+ ),
285
+ dtype = "int64" ,
286
+ )
287
+ ),
288
+ ),
289
+ (("b" , np .nan ), Series ([3 , 6 ], dtype = "int64" , name = ("b" , np .nan ))),
290
+ ],
291
+ )
292
+ def test_frame_getitem_nan_cols_multiindex (
293
+ indexer ,
294
+ expected ,
295
+ nulls_fixture ,
296
+ ):
297
+ # Slicing MultiIndex including levels with nan values, for more information
298
+ # see GH#25154
299
+ df = DataFrame (
300
+ [[1 , 2 , 3 ], [4 , 5 , 6 ]],
301
+ columns = MultiIndex .from_tuples (
302
+ [("a" , "foo" ), ("b" , "bar" ), ("b" , nulls_fixture )]
303
+ ),
304
+ dtype = "int64" ,
305
+ )
306
+
307
+ result = df .loc [:, indexer ]
308
+ tm .assert_equal (result , expected )
309
+
310
+
232
311
# ----------------------------------------------------------------------------
233
312
# test indexing of DataFrame with multi-level Index with duplicates
234
313
# ----------------------------------------------------------------------------
0 commit comments