四时宝库

程序员的知识宝库

pandas实战:干掉文本文件中的中文字符

问题描述:

现在有一表格状文本文件,其内容如下图:

需要去除文件中的所有中文字符以及与之相连的“=”或者“:”

解决思路:

处理单个字符串如: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"


关注后私信中文字符+邮箱获取源码

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接