使用Python依次置换保护法将一列的数据分为多列的方法

背景介绍:
我们在日常处理数据的过程中,往往会遇到类似log类文件,他们的的分列并不是明显,不同列之间间隔不同数目的空格,这种情况下,对于简单字符串,一般来说使用正则表达式来处理比较方便,因为含有多种空白字符的字符串拆分,一般会用到正则表达式:\s+,但是对于字符串的表格或者Series时,可能并不能简单的应用,因此,在这种时候,可能就需要用到字符串split方法,但是split方法,即

data['1'],data['2']=data['1 2'].str.split(' ',1).str

问题说明:
对于只有两列的合并表格,分开时由于分隔符种类少,因此不存在困难,但是对于多列合并数据要分开成表格时,就可能会出现以下问题:
不同列之间的空白字符间隔可能在相同的位置,由于数据占用的位数不同,因此,不同的行索引之间的列之间的空白字符很可能不同,我这里遇到的就是
-2/-5 1 1.0 1.0 9.395 1.433
1/0 1 1.0 1.0 20.51 1.492
5/-1 2 1.0 1.0 17.12 1.482
可以看出,由于第一列占用位数不同,导致-2/-5之后有7个空格,但是1/0后面有9个空格,5/-1后面有8个空格,而在第二列和第三列之间是相同的三个空格,在第四列,第五列,第六列之间是1个空格,在第五列和第六列之间是6个空格,这样我在分列时就出现了分错列的情况,导致分列失败。我的思路是分两次列,第一次以6个空格为分隔符将第一列和最后一列分出,但是可以发现,由于第一列和第二列之间的空格数量有差异,这种差异将会被分到中间的复合列中,因此,在复合列的第一列前将会带有1个,或2个或3个的空格字符,因为我们知道,在复合列的第一列和第二列之间是3个空格字符,因此,如果按照一个,两个或者三个空格去划分,都会出现错列的情况发生,
问题解决:
我在思考很久后,发现可以以一种通过多次复用将不同的空格字符转换为统一的分割符号的方法:

DF['Bin']=DF['Bin'].str.replace('   ',',')#依次置换保护的方法,将三个空格转换为‘,’
DF['Bin']=DF['Bin'].str.replace('  ',',')#将两个空格转换为‘,’
DF['Bin']=DF['Bin'].str.replace(' ',',')#将一个空格转换为‘,’

通过这种方法,将复合列中的分隔符统一转换为‘,’,然后用‘,’来对数据进行分列,可以实现避免错列情况的发生,我称这种方法为‘依次置换保护法’,就是将我们需要的分割符号置换为其他分隔符,简单说就是把多种不同的分隔符都依次转换为你最终要使用的分隔符;这样在后面分列时就可以实现分割符号的格式统一。

DF['Bin']=DF['Bin'].str.replace('   ',',') 
DF['Bin']=DF['Bin'].str.replace('  ',',')
DF['Bin']=DF['Bin'].str.replace(' ',',')
DF['1'],DF['2'],DF['3'],DF['4']=DF['Bin'].str.split(',',4).str
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Pydaty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值