繁体   English   中英

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

[英]Reading pipe-delimited file with html tags using Pandas into data-frame

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

示例文本文件是:

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

<br />

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

<a href="https://google.com/" target="_blank">``<span style="color: rgb(0, 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, 0, 255);">google.com/</span></a>.</p>

<br />

<br />

&nbsp;

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

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

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

<br />

<span style="color: rgb(0, 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()进行打印

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

>>> 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..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM