问题描述
我一直在使用 Pandas/Python 在 Mac 中读取管道分隔的数据文件。数据文件包含没有标题的聊天记录。我们可以提供的标题信息是 ID | Name | transcripts_text
示例文本文件是:
P37001 |约翰 |感谢您伸出援手。我们的客户支持代理can’t
(不能)通过我们的任何联系渠道(包括电话和短信)接受所有申请或提供状态。<br />
<br />
您可以使用我们的 <a href="https://www.google.com/">
<span style="color: rgb(0,255);">Payment Program</span></a>
申请贷款。要查看您的贷款状态或有其他问题,请访问 the 
;
<a href="https://google.com/" target="_blank">``<span style="color: rgb(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,255);">google.com/</span></a>.</p>
<br />
<br />
P37002 |约翰 | <span style="color: rgb(0,205);"><strong>XX FORMAL MALE XX</strong></span><br />
为了收集您的个人信息,我们将在接下来的几分钟内提供一份安全表格。当您看到消息框更改为安全表单时,您可以安全地输入
"Submit"
。选择“提交”后,消息框将返回,您可以在我们的对话中输入非个人性质的其他详细信息。<br />
<br />
<span style="color: rgb(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
解决方法
如果您将 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   sometext sometext
解决方案:
>>> df[~df['ID'].str.contains("<br />| ")]
ID Name transcripts_text
0 P37001 John Thanks for reaching out. Out..
或
创建您要删除的字符串列表并使用 join
传递它。
>>> spl =['<br />',' ']
>>> df[~df['ID'].str.contains('|'.join(spl))]
ID Name transcripts_text
0 P37001 John Thanks for reaching out. Out..