@@ -679,21 +679,32 @@ def get_converter(s):
679679 )
680680 raise ValueError (msg ) from err
681681
682- converters = (get_converter (s ) for s in index_sample )
682+ has_nan = any (isna (n ) for n in name_sample )
683+
684+ sample = name_sample if has_nan else index_sample
685+ converters = (get_converter (s ) for s in sample )
686+
683687 names = (
684688 tuple (f (n ) for f , n in zip (converters , name , strict = True ))
685689 for name in names
686690 )
687691
688- elif any (isna (k ) for k in self .indices .keys ()):
689- converters = [get_converter (name ) for name in names ]
690- names = (converter (name ) for converter , name in zip (converters , names ))
691-
692+ indices = self .indices
693+ if not self .dropna and has_nan :
694+ indices = {}
695+ for k , v in self .indices .items ():
696+ k = tuple (np .nan if isna (e ) else e for e in k )
697+ indices [k ] = v
692698 else :
693- converter = get_converter (index_sample )
699+ has_nan = isna (name_sample )
700+
701+ convert_sample = name_sample if has_nan else index_sample
702+ converter = get_converter (convert_sample )
694703 names = (converter (name ) for name in names )
695704
696- indices = {np .nan if isna (k ) else k : v for k , v in self .indices .items ()}
705+ indices = self .indices
706+ if not self .dropna and has_nan :
707+ indices = {np .nan if isna (k ) else k : v for k , v in indices .items ()}
697708
698709 return [indices .get (name , []) for name in names ]
699710
0 commit comments