Python之pandas學習【9】:利用pandas篩選出CSV某幾列的數據進行數據處理

今天做了一個實戰性的任務,利用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循環的方式。 

發佈了234 篇原創文章 · 獲贊 71 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章