pandas實戰:幹掉文本文件中的中文字符

pandas實戰:幹掉文本文件中的中文字符

問題描述:

現在有一表格狀文本文件,其內容如下圖:

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"


關注後私信中文字符+郵箱獲取源碼


分享到:


相關文章: