1. 程式人生 > >『Python思考』資料檢查和校驗的函式_不斷更新_不斷改進

『Python思考』資料檢查和校驗的函式_不斷更新_不斷改進

        注:如有疑問或好的建議,可以在評論區評論

        最近的工作經常跟資料打交道,在工作的過程中也漸漸明白到資料是非常容易出錯的,其中一些方面是因為從別人那裡接收到的資料本身就有問題,要麼是資料出錯、要麼是格式不符合我們的要求,後者只需要把我們要求的格式跟對方說明白就可以了,但是說起來容易做起來卻很難,所以實際上往往還是要自己來進行資料預處理,而且我們進行資料預處理後也要對資料進行檢查和校驗,以免在這一步就出錯了;而前者則要複雜得多,資料出錯的原因是多方面的,也許只是對方在錄入資料的時候多寫了幾個空格、或者把英文大寫寫成小寫亦或其它種種原因,在此不贅述。

        另一方面則是我們寫程式碼對資料進行各種處理的時候出現問題,要麼是不小心寫錯了程式碼,如把要處理的資料的變數名寫錯成另一資料,要麼是使用的函式得到的結果跟我們想要的並不一樣,要麼是對資料處理的思路出了問題,凡此種種均都會對資料的正確性造成破壞。

        因此資料檢查和校驗是非常重要的事。

        在網上找了找,發現 python 中好像並沒有相關的庫,但是由於使用 python 來進行資料分析和資料探勘的需求越來越大,因此對於資料檢查和校驗的需求也越來越大,所以準備寫一個用於資料檢查和校驗的簡單的函式,如果以後隨著功能越來越強大則會再改成類、甚至是到時有足夠能力的話,則把它變為一個開源的庫。

        參考資料或參考資料備用:

        思考區:

        # 本函式目前主要針對 pandas 的 DataFrame 物件,在後期將會陸續完善其它資料型別

# 考慮到本函式的輸出資訊量會比較大,因此應當設定輸出資訊量的級別。級別按重要性從大到小排列,級別越低輸出的資訊越少,但輸出的資訊越重要、關鍵,而且每個級別的輸出資訊都是向下相容的。如級別二的輸出資訊會包括級別一的全部輸出資訊。

        本函式主要分為兩大部分:資料檢查和資料驗證

        1、資料檢查:

        1.1、資料的型別

        如果資料型別跟我們想要的不一樣,那麼毫無疑問是資料有問題,所以應該最優先檢驗

        1.2、資料元素的型別

        有的時候資料元素的型別也非常重要,如 DataFrame 物件中的每一列中的每個資料型別是不是我們想要的也是需要驗證的,如果發現型別不對,那毫無疑問也是資料出了問題

        1.3、驗證讀取到的中文資料是不是亂碼

由於 python2.X 對中文的支援並不好,因為讀取中文資料往往會出現亂碼,也往往很讓人頭痛,所以這一步的檢查是必需的

        2、資料校驗:

        2.1、統計資料中的空行數量

        空行:指該行上所有列的值均為 NaN ,而至少有一列的值不為 NaN 則稱為 資料缺失行(暫定)

一般來說,我們的資料集是不應該有空行的,空行對我們的意義並不大(至少目前還沒遇到過這種情況)也就意味著如果出現了空行,極有可能是資料出問題了。

        2.2、資料缺失行的數量

        一般來說,資料集出現缺失值是很正常的事,但是為什麼還是要統計其數量呢?一是為了避免在寫程式碼的時候由於手抖,將本來是將 NaN 賦值給某個數的,但卻變成了賦值為某一整列了;二是為了對整個資料集有個大概的概念,便於自己對整個資料集的瞭解(當然,如果將其視覺化的話,效果會更好,所以在後期將會加上這個功能)

        程式碼區:

def check_data(data):
    """
    檢查和校驗資料
    """
    try:
        print "資料:", data

        print "資料型別為:", type(data)

        # 求資料長度
        if isinstance(data, int) or isinstance(data, float):
            print "這是整數或浮點數, 沒有長度"
        else:
            print "資料長度為:", len(data)
    except:
        print "遇到未知錯誤!"

    if isinstance(data, pd.DataFrame):
        print data.describe()
        for i in data:
            print "這是%s列" % i, data[i]
            print data[i].sum()

    print "資料檢查函式執行結束"
    print "-" * 70

相關推薦

Python思考資料檢查函式_不斷更新_不斷改進

        注:如有疑問或好的建議,可以在評論區評論         最近的工作經常跟資料打交道,在工作的過程中也漸漸明白到資料是非常容易出錯的,其中一些方面是因為從別人那裡接收到的資料本身就有

python思考關於列表的淺複製深複製的理解

>>> mylist1 = [1, 2, 3, 4] >>> myl = mylist1 >>> myl [1, 2, 3, 4] >>

Python筆記 lambda表示式函數語言程式設計

lambda表示式 lambda用來編寫簡單的函式,而def用來處理更強大的任務。 lambda的一般形式是關鍵字lambda後面跟一個或多個引數,緊跟一個冒號,以後是一個表示式。 lambda是一個表示式而不是一個語句。它能夠出現在Python語法不允許

移植Modbus到STM32F103(4):串列埠資料長度的支援

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

Python CoolBook數據結構算法_字典比較&字典集合

pytho 轉換 amp 重復元素 註意 鍵值 相同 values 返回 一、字典元素排序 dict.keys(),dict.values(),dict.items() 結合max、min、sorted、zip進行排序是個很好的辦法,另外註意不使用zip時,字典的lamb

003_015 Python 檢查信用卡

程式碼如下: #encoding=utf-8 print '中國' def cardLuhnChecksumIsValid(card_number):     """ checks to make sure that the card passes a luhn m

Python CoolBookC擴展庫_其五_C語言層面Python庫之間調用API(待續)

新的 c庫 ati .com 創建 結構 指針 內存 point 一、C層面模塊添加API 我們仍然操作如下結構體, #include <math.h> typedef struct Point { double x,y; } Po

Python CoolBookC擴展庫_其六_從C語言中調用Python代碼

callable 什麽 跟著 來講 cpp iat mst 轉化 gcc 一、C語言運行pyfun的PyObject對象 思路是在C語言中提供實參,傳給python函數: 獲取py函數對象(PyObject),函數參數(C類型) 獲取GIL(PyGILState_

Python CoolBookC擴展庫_其六_線程

正在 args adsi 控制 數組 代碼 and begin extend GIL操作 想讓C擴展代碼和Python解釋器中的其他進程一起正確的執行, 那麽你就需要去釋放並重新獲取全局解釋器鎖(GIL)。 在Python接口封裝中去釋放並重新獲取全局解釋器鎖(GIL)

python包-numpy資料讀取儲存(二)

目錄 0.為什麼要使用numpy儲存資料 1.儲存為二進位制檔案(.npy/.npz)並讀取 numpy.save和numpy.load numpy.savez numpy.savez_compressed 2.儲存到文字檔案 numpy.savetxt nump

Python基礎學習---資料型別條件語句(三)

1 #!/usr/bin/python3 list = ['Google', 'Runoob', 1997, 2000] print ("原始列表 : ", list) del list[2] print ("刪除第三個元素 : ", list) 2 #!/usr/bi

Python學習海龜法則學習

2、 import pandas as pd # 匯入上證指數的原始資料 index_data = pd.read_csv(r"C:\Users\LCG22\Desktop\work\learn\Python\PythonLearn\DataSet\all_tradin

【廖雪峰Python習題集】資料型別變數

請打印出一下變數的值: n=123 f=456.789 s1='Hello,world' s2='Hello,\'Adam\" s3=r'Hello,"Bart"' s4=r"'Hello, Lisa

Hibernate髒資料檢查快取清理策略

簡述 清理快取: 對當前持久化狀態的快取資料進行檢查,並且將有修改的資料持久化到資料庫當中的過程稱為“清理快取”。清理快取有一定的觸發策略。 策略詳解: 當一個物件在持久化的時候會新增到session

python工作工作中常用 Excel 表公式

VLOOKUP函式 假設C1與A列中的值匹配,返回B列對應的值,則在C1輸入公式: =VLOOKUP(C1,A:B,2,0) VLOOKUP函式用法如下:(以上述假設為例) C1是要查詢的值,A:B

python:廖雪峰教程——python基礎:資料型別變數 轉義符練習

1、通過s1 ,s2 可以知道  r'      '或者r"       "表示的是內部' '或者" "的字串預設不轉義2、最後一個s4我們也可以用''' '''來進行換行的操作規範:'''line1             line2     

python工作matplotlib 庫的一些注意點

1、在畫多幅圖時,每畫一張圖後都要使用 plt.close() 將圖關閉,否則每張圖都會累積畫到下一幅圖 2、畫多個圖表時可以使用 plt.figure(fig_i) 來建立 3、在同一個圖中畫多個子

python(計算資料偏差峰度)

numpy.set_printtoptions(edgeitems=5):值過多,顯示前5個和後5個偏度:衡量隨機分佈的不均衡性,偏度=0,數值相對均勻的分佈在兩側峰度:概率密度在均值處峰值高低的特徵python計算資料均值、標準差、偏度、峰度:import numpy as

python遍歷資料檔案

在Python中,檔案操作主要來自os模組,主要方法如下: os.listdir(dirname):列出dirname下的目錄和檔案 os.getcwd():獲得當前工作目錄 os.curdir:返回當前目錄('.') os.chdir(dirname):改變工作目錄到di

Python學習pandas進階學習筆記

Pandas資料分析基礎 http://blog.csdn.net/cbbing/article/details/50721468 1、 # 輸出系統當前時間 now = datetime.now() print now print now.day print now.we