2017-02-22 16 views
0

Я пытаюсь сравнить два CSV-файла. Первая имеет кучу атрибутов, намеренно разделенных на разные столбцы. Второй csv имеет все эти атрибуты, объединенные в одну ячейку. Я хочу найти определенное количество совпадений и, после подтверждения, захватить данные из другой ячейки (идентификатор изображения) во второй csv.Pandas matching using .extract()

Я использую pandas (новичок в нем), и до сих пор думаю, что извлечение/извлечение - это то место, где я хочу быть. Но в этом базовом тесте я не понимаю, почему у меня нет матчей.

image_index = pd.Series(['Classic', 'Duffle', 'Bag', 'Leather']) 
image_index.str.extract('(?P<duffle>(?i)Duffle)(?P<bag>(?i)Bag)', expand=False) 

Результат:

duffle bag 
0 NaN NaN 
1 NaN NaN 
2 NaN NaN 
3 NaN NaN 

ответ

0

Вам необходимо чередование | между группами, так как у вас есть только каждый шаблон группы в одной строке:

>>> image_index.str.extract('(?P<duffle>(?i)Duffle)|(?P<bag>(?i)Bag)', expand=False) 
    duffle bag 
0  NaN NaN 
1 Duffle NaN 
2  NaN Bag 
3  NaN NaN 
+0

Почему это не требуется в примерах в документах? Я не вижу этого ни в одном из них. http://pandas.pydata.org/pandas-docs/stable/text.html – thaneofcawdor

+0

В примерах в документе строка имеет совпадения с обеими группами, но здесь это не так. Если у вас есть 'DuffleBag' в серии, то ваше первое регулярное выражение найдет совпадение. –