Функция соединения Удаляет первый символ строки | Python и очистка данных

я написал функцию для удаления ссылки на изображение из текстовых данных (строки, хранящиеся в пандах)

image_link_1 = 'â\x80¦IMAGEâ\x80¦' 
image_link_2 = 'IMAGE'

def remove_image(text):
    remove_im = ''.join([i for i in text if i not in image_link_1 and image_link_2])
    return remove_im

df['title_and_abstract'] = df['title_and_abstract'].apply(lambda x: remove_image(x))

Проблема в том, что функция удаляет первую букву некоторой строки. Особенно кажется, что функция удаляет только заглавные буквы. Странный.

Вот пример

'Это пример строки. Вот ИЗОБРАЖЕНИЕ.

после использования функции:

'his is an example string. Here is the .'

Я действительно не понимаю, почему эта функция делает это.

Заранее спасибо!

Отвечает ли это на ваш вопрос? Почему `a == b или c или d` всегда оценивается как True?

quamrana 15.12.2020 11:45

вы пробовали оставлять пробел между ""? remove_im = ' '.join([i for i in text if i not in image_link_1 and image_link_2])

Ali Ülkü 15.12.2020 11:45

Несвязанное Примечание: вы можете (и, вероятно, должны) заменить lambda x: remove_image(x) только на remove_image.

Roy Cohen 15.12.2020 11:57

@AliÜlkü да, я сделал

Epimetheus 15.12.2020 12:08

@РойКоэн. Спасибо за ваш ответ. Я был бы заинтересован в кратком объяснении, если вы можете уделить немного времени :)

Epimetheus 15.12.2020 12:13

@Epimetheus Когда вы пишете remove_image (без круглых скобок), вы ссылаетесь на функциональный объект. Этот объект при вызове запускает тело функции. Когда вы пишете lambda x: remove_image(x), вы имеете в виду анонимный функциональный объект. Этот объект при вызове запускает тело лямбда-выражения, которое вызывает функцию. Таким образом, обе опции при вызове будут запускать функцию.

Roy Cohen 15.12.2020 12:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  • for i in text разбивает текст на отдельные символы; если вам нужны слова, это будет for i in text.split()
  • and image_link_2 проверяет, не пусто ли image_link_2, что всегда верно; то, что вы, вероятно, хотите, это if i not in [image_link_1, image_link_2]

Надеюсь, это поможет вам избавиться от застревания?

Спасибо за ваш быстрый ответ: Если я использую форму предложения: если я не в [image_link_1, image_link_2], ссылки вообще не удаляются.

Epimetheus 15.12.2020 12:11

Да, вам, вероятно, придется объединить их. Вы можете распечатать некоторые промежуточные результаты, чтобы лучше понять, что делает код...

Jiří Baum 15.12.2020 12:21

просто потому что мне любопытно. Если нужно удалить более 10 слов, определение каждого слова как одной строки представляется невозможным. Вот почему пытался хранить больше слов в одном списке строк, но это не сработало. Ребята, есть мысли по этому поводу?

Epimetheus 15.12.2020 14:47

Да, вы должны иметь возможность определить список слов как список или кортеж (или, если вам нужно рассматривать их по-разному, как словарь). Тогда условие будет примерно таким: if word not in image_links

Jiří Baum 16.12.2020 02:42
Ответ принят как подходящий

Я также новый ученик Python, поэтому я хочу объяснить ответ своими мыслями, которые могут помочь людям, которые будут смотреть ветку в будущем.

Как правильно сказано в предыдущем ответе, исходная функция повторялась только по отдельным символам (I, M, A, G, E), а не по словам (IMAGE). Это также привело к удалению всех одиночных символов, определенных в image_link_1 и 2.

text.split() решает эту проблему, поскольку исходная строка разбивается на слова, а не на символы.

Рабочий код:

def remove_link(text): 
    remove_im = ' '.join([i for i in text.split() if i not in [image_link_1, image_link_2]])
    return remove_im

df['title_and_abstract'] = df['title_and_abstract'].apply(lambda x: remove_link(x))

Другие вопросы по теме