#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. Рад это слышать. Если это решит вашу проблему, пожалуйста, отметьте это как принятый ответ