Python 特定字符串替换

问题

在使用python进行数据处理时,有些数据格式在导入时存在问题,一些数据处理工具(如numpy.loadtxt)没有能力进行处理,这时就需要对数据进行预处理,生成满足工具要求的数据。例如下面这种类型的数据:

1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S

需要用逗号(,)分隔数据项,但是数据项中包含了逗号,数据处理工具会将字符串中的逗号也当成数据项分隔符进行分隔,导致一个数据项被解析成2个数据项,且不包含逗号的字符串仍然会被解析成1个少数据项,这样就乱套了。

解决

这个字符串中的逗号对数据处理结果没有影响,可将逗号替换为其他符号,如分号(;)。

但直接替换不能解决,因为字符串外面的逗号需要保留,只是需要替换字符串或引号中的逗号。

一个解决的办法是通过正则表达式匹配包含逗号的字符串,然后提取非逗号部分,再拼接

import re
with open('tan.csv','r') as f1:
    list1=f1.readlines()
f1.close()

#取一行进行测试,0行为标题行
s = list1[1]

#输出原始数据行
print("s:\n{}".format(s))

#使用正则表达式替换
s2=re.sub(r'(".*),(.*")',r'\1;\2', s)

#输出处理后的数据行
print("s2:\n{}".format(s2))

结果如下:

s:
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S

s2:
1,0,3,"Braund; Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S

可通过循环替换后,再写入到新的csv文件,预处理就做好了,就可以用numpy工具来处理新生成的文件了。

注:预处理实际要更复杂,比如某些数据项缺少值,在使用numpy导入时仍然会报错,需要有更完善的预处理机制。或者使用pandas 等功能更强大的少数据导入、处理工具。

var code = "8f7a25fc-1c5b-4429-a4f2-234c753af034"

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值