问题描述:
现在有一表格状文本文件,其内容如下图:
需要去除文件中的所有中文字符以及与之相连的“=”或者“:”
解决思路:
处理单个字符串如:a="纬度=38.28412",我们可以使用split方法,a.split("=")[1],也可以使用切片a[3:],还可以使用正则匹配。这里以"纬度=xxx"这一列为例,
- 导入库
import pandas as pd
import numpy as np
- 读入文件
file = "test.txt"
df = pd.read_csv(file,sep="\s+",index_col=0,names = ['date', 'time', 'lat', 'lon', 'intensity', 'gradient', 'err','method', 'province','city','county' ],encoding='gbk', header = None)
- 数据处理
方法一:配合map使用自定义函数
df.lat = df.lat.map(lambda x: x.split("=")[1])
方法二:使用pandas.Series.str.slice 切片
df.lat = df.lat.str.slice(start=3)
方法三:使用pandas.Series.str.extract 正则提取
df.lat = df.lat.str.extract("(\d+\.\d+)", expand=False)
方法四:pandas.Series.str.findall正则提取
df.lat = df.lat.str.findall('(\d+\.\d+)') .str.get(0)
#findall返回的是列表,需要配合get抓取列表的第0个元素
这个问题shell处理也很方便。参考http://www.sosidc.com/post-117.html中的分析,中文的编码规则大致为:第一个字节的值在0x81到0xFE之间,第二个字节的值在0x40到0xFE之间。可以使用LANG=C sed -r "s/[\x81-\xFE][\x40-\xFE]//g" file直接去除所有中文字符,结合我们这里的情况可以再加个管道删除=和:,即LANG=C sed -r "s/[\x81-\xFE][\x40-\xFE]//g" 2017_05_09.txt.1 | sed "s/[=|:]//g"
关注后私信中文字符+邮箱获取源码