日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python数据清洗 - 洗什么?怎么洗?看完就明白了

發(fā)布時(shí)間:2024/7/5 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数据清洗 - 洗什么?怎么洗?看完就明白了 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

缺失值處理

刪除缺失值

插補(bǔ)缺失值

不處理缺失值

重復(fù)值處理

異常值處理

遍歷查找異常值,并根據(jù)規(guī)則調(diào)整大小?

刪除異常值

視為缺失值后進(jìn)行插補(bǔ)

數(shù)據(jù)挖掘過程中,采集的原始數(shù)據(jù)里存在著各種不利于分析與建模工作的因素,比如數(shù)據(jù)不完整、數(shù)據(jù)矛盾、異常值等。這些因素不僅影響建模的執(zhí)行過程,更有甚者在不知不覺間給出錯(cuò)誤的建模結(jié)果,這就使得數(shù)據(jù)清洗顯得尤為重要。但是數(shù)據(jù)清洗并不是數(shù)據(jù)預(yù)處理的全部內(nèi)容,它只是第一步而已,接下來還有數(shù)據(jù)集成、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)規(guī)約等一系列處理。在實(shí)際應(yīng)用中,數(shù)據(jù)預(yù)處理的工作量占整個(gè)建模過程的60%,可以說,預(yù)處理做得好,模型基本就出來了。

數(shù)據(jù)預(yù)處理的主要內(nèi)容包括:

  • 數(shù)據(jù)清洗;
  • 數(shù)據(jù)集成;
  • 數(shù)據(jù)轉(zhuǎn)換;
  • 數(shù)據(jù)規(guī)約;
  • 但是在這一篇里,我們只講數(shù)據(jù)清洗,其他部分會(huì)慢慢整理。

    數(shù)據(jù)清洗主要是刪除原始數(shù)據(jù)中的無關(guān)數(shù)據(jù),重復(fù)數(shù)據(jù),平滑噪聲數(shù)據(jù),篩選掉與建模目的無關(guān)的數(shù)據(jù),處理缺失值與異常值等。

    缺失值處理

    除了很明顯的缺失值(單元格處無值)之外,還有一種隱形的缺失值,比如,你要分析一個(gè)人從2018年初到現(xiàn)在每個(gè)月的收入情況,加入某個(gè)月這個(gè)人完全沒有收入,賬單流水中是不會(huì)顯示這種情況的,如果你想把對(duì)這些沒有收入的月份進(jìn)行缺失值處理的話,首先你就要找出哪些月份不在賬單流水中。那么請(qǐng)看下面這個(gè)鏈接中的文章吧,文章會(huì)給出2018年初到現(xiàn)在連續(xù)的日期,你只需要匹配一下就知道哪些月份不在賬單中了。

    缺失值處理 - 獲取一段時(shí)間內(nèi)所有日期的列表 - (Python、MySQL)

    處理缺失值的方法分為3類:刪除、插補(bǔ)、不處理。

    刪除缺失值

    如果通過刪除小部分的數(shù)據(jù)就可以達(dá)到目標(biāo),那么這無疑是最簡單高效的辦法。但是考慮到數(shù)據(jù)采集的不易,因此一般不會(huì)輕易刪除數(shù)據(jù)。

    先來看看數(shù)據(jù)的大致情況

    import pandas as pd#讀取文件 datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置 data = pd.read_excel(datafile)#如果是csv文件則用read_csv print("顯示缺失值,缺失則顯示為TRUE:\n", data.isnull())#是缺失值返回True,否則范圍False print("---------------------------------\n顯示每一列中有多少個(gè)缺失值:\n",data.isnull().sum())#返回每列包含的缺失值的個(gè)數(shù)

    運(yùn)行結(jié)果:

    顯示缺失值,缺失則顯示為TRUE:姓名 身高 性別 血型 出生年份 籍貫 0 False False False False False False 1 False False False False False True 2 True True True True True True 3 False False False False False False 4 False False False False False False 5 False False False False False False 6 False True True False True True 7 False False False False False False --------------------------------- 顯示每一列中有多少個(gè)缺失值:姓名 1 身高 2 性別 2 血型 1 出生年份 2 籍貫 3 dtype: int64

    刪除缺失值具體的情況是一下幾種:

    • data.dropna()?#直接刪除含有缺失值的行
    • data.dropna(axis = 1)?#直接刪除含有缺失值的列
    • data.dropna(how = 'all')?#只刪除全是缺失值的行
    • data.dropna(thresh = 3)?#保留至少有3個(gè)非空值的行
    • data.dropna(subset = [u'血型 '])?#判斷特定的列,若該列含有缺失值則刪除缺失值所在的行

    dropna官網(wǎng)介紹文檔

    插補(bǔ)缺失值

    常見的插補(bǔ)方法:

    看一眼源數(shù)據(jù):

    import pandas as pd#讀取文件 datafile = u'E:\\pythondata\\ttt.xlsx'#文件所在位置 data = pd.read_excel(datafile)#如果是csv文件則用read_csv print("顯示源數(shù)據(jù)data:\n", data)#是缺失值返回True,否則范圍False print("------------------\n用均值插補(bǔ)后的數(shù)據(jù)data:\n", data.fillna(data.mean()))

    運(yùn)行結(jié)果:

    顯示源數(shù)據(jù)data:姓名 工資 0 張三 11687.0 1 李四 10237.0 2 王五 8971.0 3 趙六 9310.0 4 馬七 15890.0 5 楊八 NaN 6 譚九 12361.0 7 黃十 9219.0 ------------------ 用均值插補(bǔ)后的數(shù)據(jù)data:姓名 工資 0 張三 11687.000000 1 李四 10237.000000 2 王五 8971.000000 3 趙六 9310.000000 4 馬七 15890.000000 5 楊八 11096.428571 6 譚九 12361.000000 7 黃十 9219.000000

    簡單的缺失值插補(bǔ)方法:

    • data.fillna(data.mean())??#均值插補(bǔ)
    • data.fillna(data.median())?#中位數(shù)插補(bǔ)
    • data.fillna(data.mode())??#眾數(shù)插補(bǔ)
    • data.fillna(data.max())? ?#最大值插補(bǔ)
    • data.fillna(data.min())? ?#最小值插補(bǔ)
    • data.fillna(0)? ? ? ? ?#固定值插補(bǔ)--用0填充
    • data.fillna(5000)? ? ? ?#固定值插補(bǔ)--用已知的行業(yè)基本工資填充
    • data.fillna(method='ffill')#最近鄰插補(bǔ)--用缺失值的前一個(gè)值填充
    • data.fillna(method='pad')?#最近鄰插補(bǔ)--用缺失值的前一個(gè)值填充

    通過擬合函數(shù)來插補(bǔ)的方法:

    主要說一說拉格朗日插值法吧,除了拉格朗日插值法,還有牛頓插值法、Hermite插值法、分段插值法和樣條插值法。有興趣的可以把后幾種方法的代碼也研究出來。

    下面是拉格朗日插值法的博客鏈接,因?yàn)閷懙暮芗?xì),所以就不重復(fù)了,點(diǎn)擊鏈接跳轉(zhuǎn)去看一看吧。

    文章鏈接:數(shù)據(jù)預(yù)處理 - 缺失值處理 - 拉格朗日插值法

    或者,也可以使用缺失值所在行的上一行填補(bǔ)缺失值:

    文章鏈接:缺失值處理 - 定位空值并用空值的上一個(gè)值填充 - (Excel)_Not Found黃小包-CSDN博客_excel填充空值

    不處理缺失值

    不處理就是不管,所以此處省略一萬字......

    重復(fù)值處理

    在Pandas中,.duplicated()表示找出重復(fù)的行,默認(rèn)是判斷全部列,返回布爾類型的結(jié)果。對(duì)于完全沒有重復(fù)的行,返回 False,對(duì)于有重復(fù)的行,第一次出現(xiàn)的那一行返回 False,其余的返回 True。

    與.duplicated()對(duì)應(yīng)的,.drop_duplicates()表示去重,即刪除布爾類型為 True的所有行,默認(rèn)是判斷全部列。

    import pandas as pd import numpy as np from pandas import DataFrame,Series#讀取文件 datafile = u'E:\\pythondata\\tt.xlsx'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv examDf = DataFrame(data)#去重 print(examDf.duplicated())#判斷是否有重復(fù)行,重復(fù)的顯示為TRUE, examDf.drop_duplicates()#去掉重復(fù)行#指定某列判斷是否有重復(fù)值 print(examDf.duplicated('name'))#判斷name列是否有重復(fù)行,重復(fù)的顯示為TRUE, examDf.drop_duplicates('name')#去掉重復(fù)行#根據(jù)多列判斷是否有重復(fù)值 print(examDf.duplicated(['name','sex','birthday']))#判斷name,sex,birthday列是否有重復(fù)行,重復(fù)的顯示為TRUE, examDf.drop_duplicates(['name','sex','birthday'])#去掉重復(fù)行

    此處只是放出代碼來,若想要了解更多,比如數(shù)據(jù)源和代碼運(yùn)行結(jié)果比較,可點(diǎn)擊下面鏈接查看:

    Python數(shù)據(jù)預(yù)處理 - 數(shù)據(jù)清洗 - 重復(fù)值處理

    異常值處理

    數(shù)據(jù)清洗過程中的異常值的處理,是選擇剔除還是用其他值代替,需要視情況而定。有些異常值可能包含某些信息,需認(rèn)真思考后采取處理方法。

    常見的異常值處理辦法:

    遍歷查找異常值,并根據(jù)規(guī)則調(diào)整大小?

    文章鏈接:異常值處理 - iterrows()對(duì) DataFrame 進(jìn)行遍歷,并修改遍歷中的異常值 - Python代碼

    刪除異常值

    import pandas as pd #導(dǎo)入pandas庫inputfile = u'E:\\pythondata\\ttt.xlsx'data= pd.read_excel(inputfile)#將工資低于1000或者高于10萬的異常值清空 data[u'工資'][(data[u'工資']<1000) | (data[u'工資']>100000)] = None #清空后刪除 print(data.dropna())

    視為缺失值后進(jìn)行插補(bǔ)

    #將工資低于1000或者高于10萬的異常值清空 data[u'工資'][(data[u'工資']<1000) | (data[u'工資']>100000)] = None #清空后用均值插補(bǔ) print(data.fillna(data.mean()))

    除了用均值插補(bǔ)之外還可以用中位數(shù)、眾數(shù)、最值、固定值、最近鄰值、拉格朗日等插值,具體方法往前翻,上面剛寫完。

    OVER!

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Python数据清洗 - 洗什么?怎么洗?看完就明白了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。