問題描述:
現在有一表格狀文本文件,其內容如下圖:
需要去除文件中的所有中文字符以及與之相連的“=”或者“:”
解決思路:
處理單個字符串如: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"
關注後私信中文字符+郵箱獲取源碼
閱讀更多 非對稱擾動 的文章