#python #dataframe #label #multilabel-classification
#python #фрейм данных #метка #многозначная классификация
Вопрос:
Как удалить определенный элемент списка в фрейме данных, который заканчивается определенной строкой в python? Например, у меня есть эта таблица:
Text | label
=======================
text1 | green txt,red,blue
text2 | black,red,blue
text3 | green txt,blue,black
text4 | black,red,green
Я хочу удалить метку, которая заканчивается строкой «txt», поэтому результат, который я хочу получить, это:
Text | label
=======================
text1 | red,blue
text2 | black,red,blue
text3 | blue,black
text4 | black,red,green
Извините, что я отредактировал вопрос.
Ответ №1:
Все значения, которые вы хотите удалить, являются строками. Если ваши списки также содержат другие строки, которые вы хотите сохранить, если они не заканчиваются на ‘txt’, используйте следующее:
df['label'] = df['label'].apply(lambda values: [val for val in values if not isinstance(val, str) or not val.endswith('txt')])
Если единственными строками, которые могут встречаться в списке, являются те, которые заканчиваются на ‘txt’, а все остальные значения, которые вы хотите сохранить, являются не строками, а целыми числами, это проще:
df['label'] = df['label'].apply(lambda values: [val for val in values if not isinstance(val, str)])
Редактировать:
Ответ на отредактированный вопрос:
df['label'] = df['label'].apply(lambda string: ','.join([word for word in string.split(',') if not word.rstrip(' ').endswith('txt')]))
Комментарии:
1. извините, что я отредактировал вопрос, на самом деле мой ярлык находится в предложении
2. Пожалуйста, будьте более точны в определении вашей проблемы. Тот факт, что это предложение, меняет подход. И до сих пор неясно, что такое элемент этой строки. Разделены ли члены запятыми? Почему иногда после запятой есть пробелы, а иногда нет. Важно ли их сохранять или нет? Все это актуально.
Ответ №2:
Вы можете создать функцию, которая удаляет элемент, заканчивающийся на ‘txt’, из списка, а затем вызывает эту функцию для каждого значения label
.
def fun(row):
ret_list=[]
for item in str(row).split(','):
if not str(item).endswith('txt'):
ret_list.append(item)
return ','.join(ret_list)
df['label']=[fun(x) for x in df.label.values]
Комментарии:
1. извините, что я отредактировал вопрос, на самом деле мой ярлык находится в предложении