将 HTML 标记删除应用于 Pandas 列

Posted

技术标签:

【中文标题】将 HTML 标记删除应用于 Pandas 列【英文标题】:Apply HTML tags removal to Pandas column 【发布时间】:2018-10-31 00:49:19 【问题描述】:

我需要从 pandas 列中的所有 html 标记中删除,只保留描述。

我已经删除了一列的标签,但需要将它们应用到其他列 - 这就是我所做的;

输入:

df.description[1]

输出:

'<p>Das Ziel der <a href="http://swa-muc.de">Software Architektur München Gruppe</a> ist es, Menschen, die sich mit Software-Architektur auseinandersetzen wollen, in und um München regelmäßig zusammenzubringen, und einen persönlichen Erfahrungsaustausch zu etablieren. Dazu dienen neben der Meetup-Gruppe insbesondere der persönliche Erfahrungsaustausch, organisiert in informellen Treffen, Diskussion von Erfahrungsberichten und Case Studies bis hin zu Vorträge und Workshops. Diese werden auch über Twitter <a href="https://twitter.com/swamuc">@swamuc</a> und Meetup bekannt gegeben.</p>'

我做到了;

read = df.description[1]
read_result = re.sub('<[^<]+?>', '', read)
print(read_result)

输出:

Das Ziel der Software Architektur München Gruppe ist es, Menschen, die sich mit Software-Architektur auseinandersetzen wollen, in und um München regelmäßig zusammenzubringen, und einen persönlichen Erfahrungsaustausch zu etablieren. Dazu dienen neben der Meetup-Gruppe insbesondere der persönliche Erfahrungsaustausch, organisiert in informellen Treffen, Diskussion von Erfahrungsberichten und Case Studies bis hin zu Vorträge und Workshops. Diese werden auch über Twitter @swamuc und Meetup bekannt gegeben.

这一切都很好,但我需要对整个 df.description Pandas 列执行此操作。

这是我尝试过的:

 new_read = df.description[0:10148]
 new_read_result = re.sub('<[^<]+?>', '', new_read)
 print(new_read_result) 

但是,这不起作用并返回;

TypeError:预期的字符串或类似字节的对象

这是我正在尝试的另一种应用方法:

df.description.apply(re.sub('<[^<]+?>', '', new_read))

但也不起作用。

如何将其应用于整个 pandas 列?

【问题讨论】:

【参考方案1】:

apply 中使用lambda

例如:

import pandas as pd
import re

df = pd.DataFrame("description": ['<p>Hello</p>', '<p>World</p>'])
print( df.description.apply(lambda x: re.sub('<[^<]+?>', '', x)))

输出:

0    Hello
1    World
Name: description, dtype: object

【讨论】:

这给了我与你在那里相同的输出,但我希望它对整个专栏都这样做,而不仅仅是针对 df.description[1] 的那个我应该忽略 df = pd.Dataframe("description... 因为我有 10148带有描述的列 这应该适用于整个专栏df.description.apply(lambda x: re.sub('&lt;[^&lt;]+?&gt;', '', x)) 我在列表中两次使用您的示例作为虚拟数据 更新示例。 它仍然无法正常工作,出现此错误:TypeError: expected string or bytes-like object【参考方案2】:

执行以下操作

def parser(text):
    return re.sub('<[^<]+?>', '', str(text))



result=df.description.apply(parser)

方法:2

df.description.apply(lambda x : re.sub('<[^<]+?>', '', str(text)))

【讨论】:

遇到错误:TypeError: parser() got an unexpected keyword argument 'inplace' 还是有错误,这次是:TypeError: expected string or bytes-like object 你能显示你正在运行的代码吗?也是错误回溯 def parser(text): return re.sub('&lt;[^&lt;]+?&gt;', '', text) result=df.description.apply(parser) 输出:TypeError: expected string or bytes-like object 现在检查代码,我已经编辑过了。我明确地将其转换为字符串

以上是关于将 HTML 标记删除应用于 Pandas 列的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:根据阈值标准删除列

如何使用 Pandas to_html 将相同的 html bg 颜色应用于所有列

应用样式器功能后如何删除列? pandas.io.formats.style.Styler.hide_columns - 不工作

Python 3.4 - Pandas - 帮助正确排列数据帧列和删除无效列

Python3教程:Pandas模块删除数据的几种情况

python--pandas删除