Удалить строку списка, начинающуюся с pandas df - PullRequest
2 голосов
/ 30 октября 2019

У меня есть строки df, содержащие списки, и я хочу удалить конкретную строку в сочетании с другими.

df ['res']:

AL1 A 15, CY1 A 16, CY1 A 20, GL1 A 17, GL1 A 62,HOH A 604, HOH A 605, L21 A 18, MG A 550, PR1 A 36, TH1 A 19, TH1 A 37, TY1 A 34, VA1 A 14, HOH A 603, VA1 A 35

Желаемый вывод: [удален HOH с другим номером]

AL1 A 15, CY1 A 16, CY1 A 20, GL1 A 17, GL1 A 62, L21 A 18, MG A 550, PR1 A 36, TH1 A 19, TH1 A 37, TY1 A 34, VA1 A 14, VA1 A 35

Я пробовал это:

data['res'].str.split().apply(lambda x: [k for k in x if k.startswith('HOH')])

1 Ответ

1 голос
/ 30 октября 2019

Проблема в том, что если вы используете .split() без чего-либо еще, каждая подстрока также будет разделена.

Так что ... ,HOH A 604 ... будет разбит на ['...', ',' ,'HOH', 'A', '604', '...'].

. Я понял, что вы хотите удалить каждый HOH со следующими номерами, верно?

Выполнение этого способа .split() приведет к удалению только HOH и сохранению A & 604.

Если вы используете .split(',') с запятой в качестве параметра, тогда мыполучит все между запятыми.

Проблема, которую я вижу с startswith, заключается в том, что иногда у ваших строк есть дополнительный пробел после запятой, а иногда нет (например, HOH A 604 & , HOH A 605)

Поэтому я бы предложил использовать not in вместо этого. НО: знайте, что это удаляет все подстроки, которые содержат HOH, даже если они находятся в конце.

попробуйте это:

df['res'].str.split(',').apply(lambda x: [k for k in x if 'HOH' not in k])

Значение ячейки теперь является списком строк, есливам нужно снова ввести строку, попробуйте это:

df['res'].str.split(',').apply(lambda x: ','.join([k for k in x if 'HOH' not in k]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...