Pandas: срезать фрейм данных в соответствии со значениями столбца

#python #pandas #dataframe #import #slice

#python #pandas #фрейм данных #импорт #фрагмент

Вопрос:

Я должен нарезать свой фрейм данных в соответствии со значениями (импортированными из txt), которые встречаются в одном из столбцов моего фрейма данных. Это то, что у меня есть:

 >df
col1 col2
 a    1
 b    2
 c    3
 d    4

>'mytxt.txt'
2
3
  

Это то, что мне нужно: отбрасывать строки всякий раз, когда значение в col2 отсутствует среди значений в mytxt.txt

Ожидаемый результат должен быть:

 >df
col1 col2
 b    2
 c    3
  

Я попытался:

 values = pd.read_csv('mytxt.txt', header=None)
df = df.col2.isin(values)
  

Но это не работает. Помощь была бы очень признательна, спасибо!

Ответ №1:

Когда вы читаете values , я бы сделал это как серию, а затем преобразовал бы ее в набор, что будет более эффективным для поиска:

 values = pd.read_csv('mytxt.txt', header=None, squeeze=True)
values = set(values.tolist())
  

Тогда срез будет работать:

 >>> df[df.col2.isin(values)]
  col1  col2
1    b     2
2    c     3
  

Что происходило, так это то, что вы читали values как фрейм данных, а не как серию, поэтому .isin метод вел себя не так, как вы ожидали.

Комментарии:

1. Рад это слышать. Если это решит вашу проблему, пожалуйста, отметьте это как принятый ответ