龙空技术网

解决Excel单元格中回车符与换行引发的导入数据错行问题

来自星宸的星痕 128

前言:

今天兄弟们对“python去掉末尾回车”大约比较关怀,你们都需要了解一些“python去掉末尾回车”的相关文章。那么小编也在网上汇集了一些对于“python去掉末尾回车””的相关知识,希望大家能喜欢,同学们快快来学习一下吧!

本人直男+工科男一枚,不是技术大拿,也写不出华丽的辞藻和优美的文章形态,只想分享自己如何解决工作中遇到的问题,希望可以帮到同样遇到这些问题的童鞋们,也算是记录下自己探索过程中的点点滴滴。

背景:

把业务系统中导出的原始数据导入数据仓库时,发现数据出现错行,或出现空值列,猜想应该是什么神奇的字符导致。

查找原因:

Excel中定位到发生错行的位置,复制单元格内容到VS Code中发现首尾出现了西文双引号,如下图

当时傻傻地以为,双引号?好办啊,ctrl+h替换成空就好了呗,结果呢,只怪我太草率,单元格中用于表示说话内容的正常的双引号都被抹掉,而图中这“两位”的身影依然倔强的存在。

继续仔细凝视这段文字,发现有个换行,也就是单元格内换行,你问我咋看出来的?因为VS Code不会给自动换行的这一行添加行号。有人会说这么明显我一眼就看出来了,我这里的截图只是个例子,实际的情况是一个单元格有上百个字符,有时几乎是把邮件内容完全粘贴过来,而一份数据有几千行,在密密麻麻的文字中肉眼很难区分出来换行的存在。

手动去掉换行后,发现双引号的身影终于消失了,试着导入数据库也不再发生错行,ok,看来这就是问题所在了。

治疗过程:

ctrl+h肯定是不行了,也不能在几千行数据中手动删除换行符,还好excel提供了用来清理特殊字符的clean函数,这函数就一个参数:需要清理的单元格地址,比如=clean(A2),然后那些奇奇怪怪的特殊字符就都被去掉了。

因为最近在自学Python,所以想是不是可以做到同样的效果,并且还能帮我进行简单的数据清洗,比如统一中西文标点,去掉首尾空格什么的。

以下是实现替换功能的Python代码,使用replace方法来实现,其中df是通过pandas引入的Excel数据集,column是目标列,\r是回车符,\n是换行符:

df['column'] = df['column'].str.replace('\r','').str.replace('\n','')

如果使用alt+enter在单元格中换行,那么只会有\n,因为我遇到的不仅有手动输入的文本,也有从其他业务系统中直接导出的数据,查看df具体内容的时候,发现会存在\r\n的情况,所以上面的代码中我把这两种情况都替换了。

探讨下Windows中的回车符与换行符,一直认为回车与换行是一回事,因为按一下键盘的Enter,光标就到下一行并且回到行首,但实际并不是这么简单,按下Enter会触发两个动作,回车与换行,回车的英文是return (\r),仅让光标回到当前行的最左侧,没有下移一行的作用,换行的英文是newline(\n),让光标在当前位置下移一行,但没有重置光标到行最左侧的作用,所以在Windows中换行是通过\r\n实现,并且两个的先后顺序不能改变。

Unix和Linux中使用\n表示回车与换行,Mac中使用\r表示回车与换行。

这里有个小疑问,为什么Excel的单元格内换行只显示\n,而不是\r\n,是因为alt+enter代表软回车,直接按下Enter才显示为\r\n?还请高手来指点哈,谢谢:)

标签: #python去掉末尾回车 #python 回车 #python 回车字符 #python添加列 #pythonreplace回车