2015-03-17 13 views
1

У меня есть рамка данных pandas, в которой мне нужно удалить определенные строки, которые не соответствуют шаблону регулярного выражения в данном столбце. Столбец, который мне нужен для запуска регулярного выражения, отформатирован: lastname,firstname, и я хочу удалить все строки в этом столбце, которые не соответствуют этому формату. Я пытаюсь использовать метод фильтрации панд, и я попытался использовать команду таким образом:
edited_df = idf['Name'].filter(regex="([aA-zZ]*)([,]{1})([aA-zZ]*)") и
edited_df = idf['Name'].filter(regex="/([aA-zZ]*)([,]{1})([aA-zZ]*)/").
Однако, делая что производит эту ошибку:
TypeError: can't use a string pattern on a bytes-like object
Результат type(idf['Name']) представляет собой серию, и каждая запись в нем есть строка, в type(idf['CIO'][1]).
Я видел этот вопрос Pandas filter rows, но я хочу сделать свою программу более модульной и не нужно настраивать список имен каждый раз, когда добавляется имя.
Я проверил свое регулярное выражение на http://pythex.org/ с тестовыми строками, и оно соответствовало ожиданию, поэтому я предполагаю, что неправильно использую метод фильтра. Любая помощь приветствуется.
Кроме того, менее важным вопросом является возможность доступа к группам захвата, созданным из регулярного выражения в модифицированном фреймворке данных.Фильтр Pandas не работает должным образом

+0

Можете ли вы попробуйте 'idf [idf ['Name']. str.contains (r" ([aA-zZ] *) ([,] {1}) ([aA-zZ] *) ")]' – EdChum

+0

@EdChum Я получаю эта ошибка, значение ValueError: не может индексировать вектор, содержащий значения NA/NaN, даже после использования fillna ('idf ['Name']. fillna (значение = 0, inplace = True)'). –

+0

Попробуйте сначала сбросить значения «NaN», поэтому 'idf ['Name']. Dropna()' – EdChum

ответ

2

Благодаря комментариям EdChum, вот как решить эту проблему:
Во-первых, падение NaN значения с помощью:
idf.dropna(subset=['Name'], inplace=True)
Затем, используя str.contains вместо фильтра:
edited_df = idf[idf['Name'].str.contains(r"([aA-zZ]*)([,]{1})([aA-zZ]*)")]

Смежные вопросы