使用 Pandas 将带有 html 标签的管道分隔文件读取到数据框

问题描述

我一直在使用 Pandas/Python 在 Mac 中读取管道分隔的数据文件。数据文件包含没有标题的聊天记录。我们可以提供的标题信息是 ID | Name | transcripts_text

示例文本文件是:

P37001 |约翰 |感谢您伸出援手。我们的客户支持代理can&rsquo;t(不能)通过我们的任何联系渠道(包括电话和短信)接受所有申请或提供状态。<br />

<br />

您可以使用我们的 <a href="https://www.google.com/"> <span style="color: rgb(0,255);">Payment Program</span></a> 申请贷款。要查看您的贷款状态或有其他问题,请访问 the&nbsp;

<a href="https://google.com/" target="_blank">``<span style="color: rgb(0,255);">付费计划</span></a>.<br /> &nbsp; <p>To apply for loan on your check Program loan,visit <a href="http://google.com/" ``target="_blank"><span style="color: rgb(0,255);">google.com/</span></a>.</p>

<br />

<br />

&nbsp;

P37002 |约翰 | <span style="color: rgb(0,205);"><strong>XX FORMAL MALE XX</strong></span><br />

为了收集您的个人信息,我们将在接下来的几分钟内提供一份安全表格。当您看到消息框更改为安全表单时,您可以安全地输入

&quot;Submit&quot;。选择“提交”后,消息框将返回,您可以在我们的对话中输入非个人性质的其他详细信息。<br />

<br />

<span style="color: rgb(0,205);"><strong>XX FORMAL FEMALE XX</strong></span>``<br /> 为了收集您的个人信息,我们将在接下来的几分钟内提供一个安全的网络表单。当您看到消息框更改为安全网络表单时,您可以安全地输入您的个人数据并选择 &quot;Submit&quot;。选择 &quot;Submit&quot; 后,消息框将返回,您可以在我们的对话中输入非个人性质的其他详细信息。

<br />

<br />

<br />

代码

import pandas as pd
quick_reply=pd.read_csv('final.txt',names=['ID','Name','transcripts_text'],sep='|')

输出

  ID     Name   transcripts_text
 P37001  John   Thanks for reaching out. Out..
 <br />  NaN      NaN

预期输出

   ID     Name   transcripts_text
 P37001  John   Thanks for reaching out. Our customer support agents can't accept all applications or provide status through any of our contact channels,including phone and messaging.You can use our ..

Removing all the html tags. And the data is captured properly in pandas data frame considering P37001 data as single row and P37002 as second row

解决方法

如果您将 HTML 文档作为文本文件,您可以尝试安装 Beautiful Soup 并解析 HTML 文档,然后您可以将该字符串(或者您可以覆盖原始文件)发送给 Pandas。您可以使用soup.get_text()

查看here如何打印 ,

您可以在下面尝试,因为您只处理了数据并且需要进行一些清理..

>>> df
        ID  Name                transcripts_text
0   P37001  John  Thanks for reaching out. Out..
1  <br />    NaN                             NaN

解决方案 1:

>>> df[~df['ID'].str.contains("<br />")]
       ID  Name                transcripts_text
0  P37001  John  Thanks for reaching out. Out..

>>> df[~df.ID.str.contains("<br />",na=False)]
       ID  Name                transcripts_text
0  P37001  John  Thanks for reaching out. Out..

就好像你想要喜欢的行首有多个字符串:

>>> df[~df['ID'].isin(['spl'])]
        ID      Name                transcripts_text
0   P37001      John  Thanks for reaching out. Out..
1  <br />        NaN                             NaN
2    &nbsp  sometext                        sometext

解决方案:

>>> df[~df['ID'].str.contains("<br />|&nbsp")]
       ID  Name                transcripts_text
0  P37001  John  Thanks for reaching out. Out..

创建您要删除的字符串列表并使用 join 传递它。

>>> spl =['<br />','&nbsp']
>>> df[~df['ID'].str.contains('|'.join(spl))]
       ID  Name                transcripts_text
0  P37001  John  Thanks for reaching out. Out..

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...