今天做了一個實戰性的任務,利用pandas篩選出CSV的某幾列數據進行數據處理,數據處理用的是re模塊,也就是正則表達式。
直接上代碼,注意看代碼註釋,自己運行一遍結合代碼註釋是最好的效果
代碼:
import re
import pandas as pd
import time
class jk_jd():
# 方法1:傳統for循環
def solution(self,data):
col = ['x','y'] # 定義要篩選的列
data_del = pd.DataFrame(data,columns=col) # 提取出要篩選的列,裝到dataframe中
for i in range(len(data_del['x'])): # 遍歷dataFrame中的每一行,進行正則表達式的匹配處理
data_del['x'][i] = re.sub("<br>(.*)", "", data_del['x'][i]) # 刪掉<br>後面的所有數據
data_del['x'][i] = re.sub("【(.*?)】","",data_del['x'][i]) # 刪掉【】中的所有數據
data_del.to_csv("deal.csv") # 導出爲CSV文件
# 方法2:pandas的map模塊方式
def solution1(self,data):
col = ['x','y']
data_dele = pd.DataFrame(data,columns=col)
data_dele['x'] = data_dele['x'].map(lambda x:re.sub("<br>(.*)", "",re.sub("【(.*?)】","",x))\
.replace('\t','').replace('\n','').replace(' ',''))
data_dele.to_csv("deal2.csv")
if __name__ == '__main__':
data = pd.read_excel('data.xlsx')
s = jk_jd()
t1 = time.time()
data_dele = s.solution(data)
print('for循環需要時間: ',time.time()-t1)
t2 = time.time()
data_dele1 = s.solution1(data)
print('map需要時間: ',time.time()-t2)
由於我計算了一下兩種方式的時間,可以看一下運行結果:
由此可知,pandas處理數據我們一般採用map的方式,不要採用for循環的方式。