【问题标题】:Apply HTML tags removal to Pandas column将 HTML 标记删除应用于 Pandas 列
【发布时间】: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 列?

【问题讨论】:

    标签: python html 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
    • 现在检查代码,我已经编辑过了。我明确地将其转换为字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多