Ответ 1
Ваш подход будет работать, несмотря на предупреждение, но лучше не полагаться на неявное, неясное поведение.
Решение 1, сделать выбор индексов в a_list
логической маской:
df[df.index.isin(a_list) & df.a_col.isnull()]
Решение 2, сделайте это в два этапа:
df2 = df.loc[a_list]
df2[df2.a_col.isnull()]
Решение 3, если вы хотите использовать однострочник, используйте хитрость, найденную здесь:
df.loc[a_list].query('a_col != a_col')
Предупреждение исходит из того факта, что логический вектор df.a_col.isnull()
имеет длину df
, а df.loc[a_list]
имеет длину a_list
, т.е. короче. Поэтому некоторые индексы в df.a_col.isnull()
отсутствуют в df.loc[a_list]
.
Pandas выполняет переиндексацию логического ряда в индексе вызывающего фрейма данных. Фактически он получает из df.a_col.isnull()
значения, соответствующие индексам в a_list
. Это работает, но поведение неявно, и может легко измениться в будущем, так что о чем предупреждение.