Pandas string.contains не работает, если искомая строка содержит подстроку в начале строки - PullRequest
0 голосов
/ 09 февраля 2020

Я использую str.contains для поиска строк, в которых столбец содержит определенную строку в качестве подстроки

df[df['col_name'].str.contains('find_this')]

Возвращает все строки, где find_this находится где-то внутри строки. Однако в редком, но важном случае, когда строка в df ['col_name'] НАЧИНАЕТСЯ с 'find_this', эта строка не возвращается вышеуказанным запросом.

str.contains () возвращает false там, где должно возвращаться true.

Любая помощь будет принята с благодарностью, спасибо!


EDIT Я добавил несколько примеров данных по запросу. Изображение фрейма данных. Я хочу обновить столбец «Eqvnt_id», поэтому, например, строки, где столбец «Course_ID» содержит AAS 102, имеют одинаковое значение «Eqvnt_id».

Для этого мне нужно иметь возможность искать строки в 'Course_ID' для 'AAS 102', чтобы найти соответствующие строки. Однако, когда я делаю это:

df[df['Course_ID'].str.contains('AAS 102')]

Строка с «AAS 102 (ENGL 102, JST 102, REL 102)» не появляется в запросе!

Типы данных все объекты. Я попытался отобразить их и применить к строковому типу, но это не повлияло на успешность запроса.

Данные с изображения можно найти по адресу https://github.com/isaachowen/stackoverflowquestionfiles

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

TLDR: поэкспериментируйте с pandas .Series.str.normalize (), пробуя разные формы Unicode, пока проблема не будет решена. 'NFK C' работал для меня.

Проблема была связана с форматом данных в столбце, который я делал ...

df['column'].str.contains('substring') 

... операция на. Использование функции pandas .Series.str.normalize () работает. Ссылка здесь. Иногда при некоторых обстоятельствах, которые я не могу намеренно воссоздать, к строкам добавляются '\ xa0' и '\ n' в начале или в конце строки. Этот пост помогает решить, как справиться с этой проблемой. После этого поста я просматривал каждый строковый столбец и изменял форму Unicode, пока не нашел что-то работающее: 'NFK C'.

0 голосов
/ 09 февраля 2020

вы можете использовать pandas .Series.str.find () вместо этого - он возвращает индекс, в котором находится строка - если он находится в начале, возвращаемый индекс будет равен 0. Если строка не найдена, она возвращает -1.

df[df['col_name'].str.find('find_this') != -1]

Дайте мне знать, если это поможет!

...