【问题标题】:Reading pipe-delimited file with html tags using Pandas into data-frame使用 Pandas 将带有 html 标签的管道分隔文件读入数据框
【发布时间】:2021-07-13 06:31:57
【问题描述】:

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

示例文本文件为:

P37001 |约翰 |感谢您伸出援手。我们的客户支持代理can’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 />   <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 />

 

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

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

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

<br />

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

<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

【问题讨论】:

  • 您的文件中是否有不带引号的换行符?
  • 在新 id 的开始之前有这个字符 &amp;nbsp;,有时它在那里,有时它不在那里。所以没有明确的分隔符来识别新行(我的意思是新的ID
  • 请尝试从您的问题中消除混乱。有关How to ask a good question? 的更多信息,请阅读本文!
  • 编辑样本数据
  • 我不是在谈论转义的 HTML 实体;您的数据中似乎有换行符。但是,这就是分隔不同记录的方式。

标签: python python-3.x pandas csv


【解决方案1】:

如果您将 HTML 文档作为文本文件,您可以尝试安装 beautiful soup 并解析 HTML 文档,之后您可以将该字符串(或者您可以覆盖原始文件)发送给 pandas。您可以使用soup.get_text()查看here如何打印

【讨论】:

  • 它不是 HTML 文档。这是一个带有一些 html 标签和编码文本的文本文件
【解决方案2】:

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

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

【讨论】:

  • 能否根据以P3***开头的ID列换行?
  • 您的意思是只选择以P3*** 开头的行吗?如果是这种情况,那么是的,我们可以。否则你可以解释一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2020-10-13
  • 2018-12-14
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多