Поиск в фрейме данных pandas нескольких строк

#python #pandas #string #list #dataframe

Вопрос:

У меня есть фрейм данных (df) со столбцом «Имена», и у меня есть отдельный список строк, которые имеют вид:

 info = ['AAA.123 456.789', 'BBB.987 654.321', 'CCC.321-654.987']  

и так далее. Я хочу выполнить поиск в столбце «Имена» в df, используя строки в списке, и сохранить результат в отдельном фрейме данных (df2). Я использовал:

 df2 = df.loc[df['Names'].str.contains('|'.join(info))]  

однако вывод для df2 (в проводнике переменных spyder) был либо пустым фреймом данных, либо был возвращен только один из результатов. Я не уверен, как я могу это исправить, поэтому буду признателен за любой совет — спасибо!

Редактировать

Указатель Имена Количество 1 Количество 2 Количество 3 Количество 4
0 ААА 12.3 4.56 7.89 10.1112
1 ВВВ 3.21 65.4 98.7 1.21110
2 ССС 456.23 1.23 10101 101.112
3 DDD 6.4 3.21 0.2029 1211.10

это образец содержимого df (это 6 столбцов и очень большое количество строк)

Правка 2

Переименовали «список» в «информацию» по предложению Сержа в комментариях

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

1. Пожалуйста, покажите образец содержимого вашего фрейма данных.

2. Не называйте свой список по списку. Это зарезервировано для определения списков.

3. кроме того, попробуйте привести минимальный воспроизводимый пример. Попробуйте создать некоторые фиктивные данные, которые создают ту же проблему. Например, для начала используйте менее сложные строковые шаблоны

Ответ №1:

Ты можешь это сделать. Если ваш df является

 df = pd.DataFrame({"Names":['AAA.123 456.789', "BBB.987 654.321", "W1234", "A_aa_1 .", "Z54"], "col1":[1,2,3,4,5]})   
 info = ['AAA.123 456.789', 'BBB.987 654.321', 'CCC.321-654.987']  

и

 df2 = df[df['Name'].isin(info)]  

дает:

 Names col1 0 AAA.123 456.789 1 1 BBB.987 654.321 2  

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

1. Хммм хорошо, странно то, что когда я использую описанный выше метод, я все равно получаю пустой фрейм данных с 6 столбцами в результате для df2? Я почти уверен, что строки в «info» находятся в df, поскольку я скопировал соответствующие записи в df в info…

2. Хорошо, удивительно, думаю, теперь это работает, большое спасибо!