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