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"

posted @ 2022-04-15 11:46  hongweigg  阅读(173)  评论(0编辑  收藏  举报