8個Python數據清洗代碼,拿來即用

2021-02-20 Python小二

不管你承不承認,數據清洗著實不是一件簡單的任務,大多數情況下這項工作是十分耗時而乏味的,但它又是十分重要的。

如果你經歷過數據清洗的過程,你就會明白我的意思。而這正是撰寫這篇文章的目的——讓讀者更輕鬆地進行數據清洗工作。

事實上,我在不久前意識到,在進行數據清洗時,有一些數據具有相似的模式。也正是從那時起,我開始整理並編譯了一些數據清洗代碼(見下文),我認為這些代碼也適用於其它的常見場景。

由於這些常見的場景涉及到不同類型的數據集,因此本文更加側重於展示和解釋這些代碼可以用於完成哪些工作,以便讀者更加方便地使用它們。

我的數據清洗小工具箱

在下面的代碼片段中,數據清洗代碼被封裝在了一些函數中,代碼的目的十分直觀。你可以直接使用這些代碼,無需將它們嵌入到需要進行少量參數修改的函數中。

1. 刪除多列數據

def drop_multiple_col(col_names_list, df): 
    '''
    AIM    -> Drop multiple columns based on their column names 

    INPUT  -> List of column names, df

    OUTPUT -> updated df with dropped columns 
    -
    '''
    df.drop(col_names_list, axis=1, inplace=True)
    return df

有時,並不是所有列的數據都對我們的數據分析工作有用。因此,「df.drop」可以方便地刪掉你選定的列。

2. 轉換 Dtypes

def change_dtypes(col_int, col_float, df): 
    '''
    AIM    -> Changing dtypes to save memory

    INPUT  -> List of column names (int, float), df

    OUTPUT -> updated df with smaller memory  
    -
    '''
    df[col_int] = df[col_int].astype('int32')
    df[col_float] = df[col_float].astype('float32')

當我們面對更大的數據集時,我們需要對「dtypes」進行轉換,從而節省內存。如果你有興趣學習如何使用「Pandas」來處理大數據,我強烈推薦你閱讀「Why and How to Use Pandas with Large Data」這篇文章(https://towardsdatascience.com/why-and-how-to-use-pandas-with-large-data-9594dda2ea4c)。

3. 將分類變量轉換為數值變量

def convert_cat2num(df):
    # Convert categorical variable to numerical variable
    num_encode = {'col_1' : {'YES':1, 'NO':0},
                  'col_2'  : {'WON':1, 'LOSE':0, 'DRAW':0}}  
    df.replace(num_encode, inplace=True)  

有一些機器學習模型要求變量是以數值形式存在的。這時,我們就需要將分類變量轉換成數值變量然後再將它們作為模型的輸入。對於數據可視化任務來說,我建議大家保留分類變量,從而讓可視化結果有更明確的解釋,便於理解。

4. 檢查缺失的數據

def check_missing_data(df):
    # check for any missing data in the df (display in descending order)
    return df.isnull().sum().sort_values(ascending=False)

如果你想要檢查每一列中有多少缺失的數據,這可能是最快的方法。這種方法可以讓你更清楚地知道哪些列有更多的缺失數據,幫助你決定接下來在數據清洗和數據分析工作中應該採取怎樣的行動。

5. 刪除列中的字符串

def remove_col_str(df):
    # remove a portion of string in a dataframe column - col_1
    df['col_1'].replace('\n', '', regex=True, inplace=True)

    # remove all the characters after &# (including &#) for column - col_1
    df['col_1'].replace(' &#.*', '', regex=True, inplace=True)

有時你可能會看到一行新的字符,或在字符串列中看到一些奇怪的符號。你可以很容易地使用 df['col_1'].replace 來處理該問題,其中「col_1」是數據幀 df 中的一列。

6. 刪除列中的空格

def remove_col_white_space(df):
    # remove white space at the beginning of string 
    df[col] = df[col].str.lstrip()

當數據十分混亂時,很多意想不到的情況都會發生。在字符串的開頭有一些空格是很常見的。因此,當你想要刪除列中字符串開頭的空格時,這種方法很實用。

7. 將兩列字符串數據(在一定條件下)拼接起來

def concat_col_str_condition(df):
    # concat 2 columns with strings if the last 3 letters of the first column are 'pil'
    mask = df['col_1'].str.endswith('pil', na=False)
    col_new = df[mask]['col_1'] + df[mask]['col_2']
    col_new.replace('pil', ' ', regex=True, inplace=True)  # replace the 'pil' with emtpy space

當你希望在一定條件下將兩列字符串數據組合在一起時,這種方法很有用。例如,你希望當第一列以某些特定的字母結尾時,將第一列和第二列數據拼接在一起。根據你的需要,還可以在拼接工作完成後將結尾的字母刪除掉。

8. 轉換時間戳(從字符串類型轉換為日期「DateTime」格式)

def convert_str_datetime(df): 
    '''
    AIM    -> Convert datetime(String) to datetime(format we want)

    INPUT  -> df

    OUTPUT -> updated df with new datetime format 
    -
    '''
    df.insert(loc=2, column='timestamp', value=pd.to_datetime(df.transdate, format='%Y-%m-%d %H:%M:%S.%f'))

在處理時間序列數據時,你可能會遇到字符串格式的時間戳列。這意味著我們可能不得不將字符串格式的數據轉換為根據我們的需求指定的日期「datetime」格式,以便使用這些數據進行有意義的分析和展示。

原文連結:https://towardsdatascience.com/the-simple-yet-practical-data-cleaning-codes-ad27c4ce0a38

相關焦點

  • 用 Python 對數據進行相關性分析
    在進行數據分析時,我們所用到的數據往往都不是一維的,而這些數據在分析時難度就增加了不少,因為我們需要考慮維度之間的關係。而這些維度關係的分析就需要用一些方法來進行衡量,相關性分析就是其中一種。本文就用python來解釋一下數據的相關性分析。
  • 用python分析上海二手房數據,用幾十行代碼爬取大規模數據!
    ,如下圖,3000條數據中有523條重複(為避免重複可以嘗試倒序循環爬取)。1.1 爬取目的一個朋友在學習自考,作業是爬取數據進行數據分析,正好最近我在學習python,所以他委託我幫他完成這一工作1.2使用模塊requests進行網絡請求、bs4進行數據解析、xlwt進行excel表格存儲2、網頁結構分析2.1 首頁分析,獲取數據網頁連結:http://sh.lianjia.com
  • Python | 看得到,取得到,才是數據(二):幾行代碼搞定PDF文件中表格數據讀取
    幾行代碼搞定PDF文件中表格數據讀取!相關閱讀如何用Python幫你高效地翻憑證?Python整合平臺Anaconda的安裝和使用如何批量在多個word文檔中查找線索關鍵詞?看得到,取得到,才是數據:pandas 也可爬蟲?
  • 四種高性能數據類型,Python collections助你優化代碼、簡潔任務
    這些模塊和包將 Python 的功能擴展到了許多流行領域,包括機器學習、數據科學、Web 開發和前端等。其中表現最好的一個就是 Python 內置的 collections 模塊了。一般而言,Python 中的 collections 模塊是用於存儲列表、字典、元組以及集等數據集合的容器。這些容器嵌入在 Python 中,可以實現開箱即用。
  • 用Python進行機器學習(附代碼、學習資源)
    數據如果能清楚的可視化表示(即特徵維度為1或2)時,方法可行。一旦數據的特徵維度等於3或者更多,這事兒就麻煩了。而且如果對結果產生影響的特徵存在交叉耦合,這麼做就完全是在浪費時間。下面我們畫個圖來感受一下:
  • 這篇文章把數據講透了(三):數據清洗
    一、前言上兩期文章中,我們已經了解到「數據」是一個龐大的體系(如下圖所示);並用了菜市場的例子,為大家講解數據來源的含義,用買菜的例子,為大家講解數據採集的步驟;而今天小陳主要給講解,我們「買完菜」以後,怎樣進行擇菜、洗菜,即數據清洗的過程。
  • Python數據類型串講(上)
    像我們日常生活中的事物,可以分為固態、液態、氣態等,python語言中的數據也有其對應的「狀態」,且要求更加嚴格,不同的狀態用不同類型的數據去表示,不允許存在語法歧義。數據結構的意義:將上述五大數據類型整合到一起。但是摻到一起不是目的。目的是能夠組合成一個好的結構,方便自己或者他人進行數據存儲或者讀取。
  • 如何用iPad運行Python代碼?
    實事求是地講,參加工作坊之前,我已經做了認真準備。只要你的設備上有個現代化瀏覽器(包括但不限於Google Chrome, Firefox, Safari和Microsoft Edge等)就行。IE 8.0?那個不行,趕緊升級吧!讀到這裡,你應該想明白了。因為只挑瀏覽器,不挑作業系統,所以別說你用Windows 10,你就是用iPad,都能運行代碼。
  • 用python寫遊戲之200行代碼寫個數字華容道
    數字移動通過數字在二維矩陣中的下標來表示數字的位置,比如8的位置是第一行、第一列即(0,0)(列表元素的下標從0開始), 第二行、第一列是(1, 0)。可以看下圖:上圖中,13的坐標是(3,0)。當滑鼠點擊13時,13和0交換位置,13的位置變成(2,0)。
  • 小白數據分析——Python職位數據分析全鏈路
    數據清洗有了數據後,先不要著急分析。我們需要對數據先有個大概的了解,並在這個過程中剔除一些異常的記錄,防止它們影響後續的統計結果。1.3 小節要介紹的按照工作經驗清洗異常值也與之類似,為了避免篇幅過長我這裡就不貼代碼了。總之,按照這3個屬性清洗完之後,還剩 9715 個職位。
  • 掌握這10個python技巧,讓你代碼工作如魚得水!
    據Stack Overflow數據顯示,Python是使用量增長最快的程式語言。福布斯最新發布的一篇報告指出,python的使用量在去年增長了456%。Netfix、IBM以及其它數以百計的公司都在使用python。包括Dropbox也是由python創建的。
  • 數據科學家需要簡潔的Python代碼
    Python 代碼樣式指引——PEP 8和linting可讀性非常重要,PEP8就是為此而打造,提供了編寫簡潔python代碼的慣例。符合PEP8規範是Pythonic代碼的最基本要求。它表明你已經了解了Python開發人員的最基本預期。
  • 用Python寫個在線Python的網站怎麼樣
    前幾天,一個朋友提出了一個建議,如何用python寫出python的解釋器,我感覺這是一個很好的問題,於是就去看看,打算用python寫一個試試
  • Python數據類型串講(中)
    1.2 序列通用操作索引(indexing)序列的索引即上文介紹的序列中元素的位置標識,按標識順序分為正向遞增序號(簡稱正序)和逆向遞減序號(簡稱逆序)。正序標識即由左往右,索引從0開始遞增,索引為0表示第一個元素,索引為1表示第二個元素,以此類推。
  • Python兩種基本數據類型:數值及字符串;python交互式運行環境
    也可以用單引號表示『這個』、『字符』、『字符串類型』python交互式運行環境在pycharm中,可以直接調用python交互式運行環境,打開pycharm的界面,看到左下角有個python console(python控制臺)點擊python console即可進入python交互式運行環境
  • Python數據清洗--類型轉換和冗餘數據刪除
    數據分析過程中最頭疼也是工作量最大的部分算是探索和清洗了,探索的目的是了解數據,了解數據背後隱藏的規律,清洗的目的則是為了讓乾淨的數據進入分析或建模的下一個環節。作者將通過三篇文章,詳細講解工作中常規的數據清洗方法,包括數據類型的轉換,重複數據的處理,缺失值的處理以及異常數據的識別和處理。
  • 用Python構建數據科學Web應用程式
    在本文中,我將向你展示如何使用streamlit python庫快速構建一個簡單的數據驅動web應用程式,只需幾行代碼。作為一名數據科學家或機器學習工程師,能夠部署我們的數據科學項目是很重要的。傳統的使用Django或Flask這樣的框架來部署機器學習模型可能是一項艱巨和/或耗時的任務。
  • 自動生成pandas代碼,python數據處理神器
    熟悉我的同學都知道,我的大部分教程最終都希望教會你怎麼節省代碼。今天我要說的不是怎麼寫代碼,而是介紹一款我親手打造的小工具,它作為探索數據的工具,你不僅不需要寫任何的代碼,它最終還會自動生成pandas代碼。
  • 如何在python中引入高性能數據類型?
    在一般意義上,python 中的集合是用於存儲數據集合(如 list、dict、tuple 和 set)的容器。這些容器直接構建在 python 中,可以直接調用。collections 模塊提供額外的高性能數據類型,這些數據類型可以提高代碼的性能。讓我們瀏覽一下 collections 模塊最流行的數據類型以及如何使用它們吧!
  • 代碼詳解:如何用Python運行高性能的數學範式?
    對於以性能為核心的應用程式和數據處理通道來講,需要運行最佳範例並選擇正確的庫集。那麼,在開發和學習中有哪些技巧呢?首先需要明確的是:編寫python代碼和編寫pythonic代碼之間存在很大差異。下面是在Github上運行的連結,用於整個代碼基礎:harshitcodes/python_paradigmsA guide to: How to compare different implementation paradigms