如何解决我可以绕过Pandas / Python中的硬编码并设置自己选择的行终止符吗?
我有一个非常脏的大量文本数据集。尽管各个列的值用制表符分隔,但所需的数据行中有许多换行符。 所有数据条目均以硬“ \ n”符号分隔。
我尝试将lineterminator
参数设置为'\n'
,但它仍在读取换行符作为新行。
执行任何形式的正则表达式或相关操作很可能会导致制表符分隔丢失,这需要将数据加载到数据框中。另外,由于数据集的大小,逐行逐字操作也不是完全可行的。
有没有办法让熊猫不将换行符读为新行,而仅当看到'\ n'时才换行?
我的数据快照: The unprocessed dataset
下面是当前状态的快速浏览: current output
突出显示的红色框应该是一个条目。
解决方法
您可以预处理为适当的TSV,然后从那里读取它。使用itertools.groupby
查找“ \ N”结尾。如果此文件还有其他问题,例如内部制表符未转义,则所有选择都将关闭。
import itertools
import re
separator_re = re.compile(r"\s*\\N\s*$",re.MULTILINE)
with open('other.csv') as infp:
with open('other-conv.csv','w') as outfp:
for hassep,subiter in itertools.groupby(infp,separator_re.search):
if hassep:
outfp.writelines("{}\n".format(separator_re.sub("",line))
for line in subiter)
else:
for line in subiter:
if line.endswith("\\\n"):
line = line[:-2] + " "
else:
line = line.strip()
outfp.write(line)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。