for循環太Low?分享幾段我工作中經常使用的for代碼!

  • 2019 年 10 月 8 日
  • 筆記

作者:劉順祥

來源:數據分析1480

前言

不管是for循環還是while循環,都是任何一門語言的基礎知識,同時也是非常重要的知識。藉助於循環的策略,可以將很多重複性的問題完美地解決。在Python中,大家可能對她的印象是「Python不適合使用循環,因為效率低,速度慢!」,但是本文中將重點介紹她,並跟大家分享我工作常用的幾段代碼示例(如果你想實操,文末有數據下載鏈接)。

for循環示意圖

可以有部分朋友還不太清楚for循環的工作機制,這裡畫一個簡單的示意圖,希望讀者能夠理解她的邏輯。

如上圖所示,圖中包含for循環過程中的三個部分,分別是漏斗、漏斗內的元素以及漏斗以下的結構,這三個部分構成了for循環的核心。讀者可以將圖中的三個核心內容分別理解為容器對象(即Python中的基礎數據結構,如字符串、列表、元組和字典等)、容器內的元素以及循環體。上圖中,左右兩個示意圖的唯一區別在於,for循環的循環體是否包含if分支判斷。

案例1:多數據文件的合併

如下圖所示,本地目錄內包含需要讀取的多個數據文件,它們均為csv格式或txt格式,且數據結構相同。該如何基於Python的for循環語句實現數據的讀取與合併呢?

# 導入第三方模塊  import pandas as pd  # 用於讀取數據  import os   # 用於返回目錄內的文件名稱    # 指定待讀取數據所在的目錄  path = r'D:datas'  # 構造空列表datas,用於存儲所有文件的數據  datas = []  for filename in os.listdir(path):      # 判斷文件類型是否為txt格式      if filename.find('txt') != -1:          # 讀取txt格式的數據          data = pd.read_csv(path + '\' + filename, sep = 't')      else:          # 讀取csv格式的數據          data = pd.read_csv(path + '\' + filename)      # 將讀取的每一個數據集存儲到datas列表中      datas.append(data)    # 將所有數據文件做合併  final_data = pd.concat(datas)  final_data  

案例2:數據單位的統一處理

如下圖所示,數據集中關於APP的下載量和軟件大小涉及到不同的數據單位,如APP的文件大小有KB單位也有MB單位。很顯然,單位不一致的數據肯定是不能直接用來分析和建模的。所以,該如何藉助於for循環的手段將數據做一致性的清洗呢?

# 讀取數據  apps = pd.read_excel('apps.xlsx')    # 處理安裝量字段install,將數據統一為「萬」的單位  install_new = []  for i in apps['install']:      # 判斷安裝量是否已「億」為單位      if i.find('億') != -1:          install_new.append(str(float(i[:-1])*10000) + '萬')          # 判斷安裝量是否已「萬」為單位      elif i.find('萬') != -1:          install_new.append(i)      else:          install_new.append(str(int(i)/10000) + '萬')    # 將install_new轉換為序列對象,並替換數據集apps內原始字段install的值  apps['install'] = pd.Series(install_new)    # 處理軟件大小size,將數據統一為「MB」的單位  size_new = []  for i in apps['size']:  # 判斷軟件大小是否已「KB」為單位      if i.find('KB') != -1:          size_new.append(str(round(float(i[:-2])/1024,2)) + 'MB')      else:          size_new.append(i)    # 將size_new轉換為序列對象,並替換數據集apps內原始字段size的值  apps['size'] = pd.Series(size_new)    # 查看數據轉換後的前10行  apps.head(10)

案例3:詞頻統計

如下圖所示,這是一篇新聞報道,如何基於該報道完成詞頻統計的操作?由於實際工作中評論數據的分析會涉及到敏感信息,故這裡用新聞報道代替,但下文中所介紹的代碼核心部分基本類似。:

# 導入第三方模塊  import jieba  # 用於中文句子的切詞  import collections  # 用於詞頻的排序    # 讀入新聞報道  fn = open('news.txt', encoding='utf-8')  news = fn.readlines()    # 將新聞報道的各段內容拼接為一個整體  news = ''.join(news)  # 刪除特殊字符,如「n」  news = news.replace('n', '')    # 對新聞內容切詞,並保留1個長度以上的詞  words = []  for i in jieba.lcut(news):      # 通過邏輯判斷,保留至少包含兩個字符的詞      if len(i) > 1:          words.append(i)    # 詞頻統計,並將詞頻結果存儲到字典中  wf = {}  for i in set(words):      wf[i] = words.count(i)    # 對詞頻結果做排序  collections.Counter(wf).most_common()  

結語

OK,今天的內容就分享到這裡,如果你有任何問題,歡迎在公眾號的留言區域表達你的疑問。同時,也歡迎各位大咖在留言區分享你們自己的策略,我會第一時間將你的留言分享給大家。

【數據鏈接】

鏈接

https://pan.baidu.com/s/18Q8WHJW0etG__pxLv_-rng

提取碼:zznv