Определение проблемы
Цель состоит в том, чтобы убрать каждую строку своих HTML-тегов и сохранить их в кадре данных.
Кадр данных определяется как:
test = pd.DataFrame(data=["<p> test 1 </p>", "<p> random text </p>"], columns=["text"])
Я уже нашел этот элегантный ответ , чтобы решить проблему.Однако ради любопытства я хочу попытаться добиться того же результата, используя цикл for.
Решение с пониманием списка:
test['text'] = [BeautifulSoup(text,"lxml").get_text() for text in test['text'] ]
Попытка цикла for с итеративным подходом к решению:
Первая попытка:
Этот код имеет переменный текститерация по каждому элементу теста dataframe и распечатка результата.Пока все хорошо.
for text in test['text']:
print(text)
Вторая попытка:
Этот код делает то же самое с урезанной версией текста.
for text in test['text']:
soup = BeautifulSoup(text,"lxml")
print(soup.get_text())
Третья попытка:
Почему результат этого кода является кадром данных, все значения которого являются "случайным текстом"?
test = pd.DataFrame(data=["<p> test 1 </p>", "<p> random text </p>"], columns=["text"])
for text in test['text']:
soup = BeautifulSoup(text,"lxml")
test["text"] = soup.get_text()
В первом цикле локальная переменная text перебирает первый элемент кадра данных, который называется «тест 1».Он превращает его в суп и добавляет его в столбец «текст» теста данных.То же самое должно произойти во втором цикле.Однако все, что происходит, это то, что значение последнего цикла транслируется по всему столбцу.
Я думаю, что моя последняя строка кода фактически транслирует одно и то же значение во все строки кадра данных.,Но как мне просто изменить значение, которое принимает переменная text в заданном цикле?
Весь пост может выглядеть странно, но я думал и тестировалпока пишу пост.Я мог бы сам найти решение и обновить пост.Но я могу застрять и мне нужна другая перспектива.Спасибо за потраченное время.
[1]: Панды: устранение неполадок при удалении тегов HTML из столбца фрейма данных