怎么用python处理数据_Python数据清洗 - 洗什么?怎么洗?看完就明白了
編輯推薦:
文章來自于csdn,本文主要講解python數據預處理中的數據清洗的主要工作:缺失值處理、重復值處理、異常值處理的相關內容,希望對您的學習有所幫助。
數據挖掘過程中,采集的原始數據里存在著各種不利于分析與建模工作的因素,比如數據不完整、數據矛盾、異常值等。這些因素不僅影響建模的執行過程,更有甚者在不知不覺間給出錯誤的建模結果,這就使得數據清洗顯得尤為重要。但是數據清洗并不是數據預處理的全部內容,它只是第一步而已,接下來還有數據集成、數據轉換和數據規約等一系列處理。在實際應用中,數據預處理的工作量占整個建模過程的60%,可以說,預處理做得好,模型基本就出來了。
數據預處理的主要內容包括:
數據清洗;
數據集成;
數據轉換;
數據規約;
但是在這一篇里,我們只講數據清洗,其他部分會慢慢整理。
數據清洗主要是刪除原始數據中的無關數據,重復數據,平滑噪聲數據,篩選掉與建模目的無關的數據,處理缺失值與異常值等。
缺失值處理
除了很明顯的缺失值(單元格處無值)之外,還有一種隱形的缺失值,比如,你要分析一個人從2018年初到現在每個月的收入情況,加入某個月這個人完全沒有收入,賬單流水中是不會顯示這種情況的,如果你想把對這些沒有收入的月份進行缺失值處理的話,首先你就要找出哪些月份不在賬單流水中。那么請看下面這個鏈接中的文章吧,文章會給出2018年初到現在連續的日期,你只需要匹配一下就知道哪些月份不在賬單中了。
處理缺失值的方法分為3類:刪除、插補、不處理。
刪除缺失值
如果通過刪除小部分的數據就可以達到目標,那么這無疑是最簡單高效的辦法。但是考慮到數據采集的不易,因此一般不會輕易刪除數據。
先來看看數據的大致情況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顯示每一列中有多少個缺失值:\n",data.isnull().sum())#返回每列包含的缺失值的個數
運行結果:
顯示缺失值,缺失則顯示為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
---------------------------------
顯示每一列中有多少個缺失值:
姓名 1
身高 2
性別 2
血型 1
出生年份 2
籍貫 3
dtype: int64
刪除缺失值具體的情況是一下幾種:
data.dropna() #直接刪除含有缺失值的行
data.dropna(axis = 1) #直接刪除含有缺失值的列
data.dropna(how = 'all') #只刪除全是缺失值的行
data.dropna(thresh = 3) #保留至少有3個非空值的行
data.dropna(subset = [u'血型 '])?#判斷特定的列,若該列含有缺失值則刪除缺失值所在的行
插補缺失值
常見的插補方法:
看一眼源數據:
import pandas
as pd
#讀取文件
datafile = u'E:\\pythondata\\ttt.xlsx'#文件所在位置
data = pd.read_excel(datafile)#如果是csv文件則用read_csv
print("顯示源數據data:\n", data)#是缺失值返回True,否則范圍False
print("------------------\n用均值插補后的數據data:\n",
data.fillna(data.mean()))
運行結果:
顯示源數據data:
姓名 工資
0 張三 11687.0
1 李四 10237.0
2 王五 8971.0
3 趙六 9310.0
4 馬七 15890.0
5 楊八 NaN
6 譚九 12361.0
7 黃十 9219.0
------------------
用均值插補后的數據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
簡單的缺失值插補方法:
data.fillna(data.mean()) #均值插補
data.fillna(data.median()) #中位數插補
data.fillna(data.mode()) #眾數插補
data.fillna(data.max()) #最大值插補
data.fillna(data.min()) #最小值插補
data.fillna(0) #固定值插補--用0填充
data.fillna(5000) #固定值插補--用已知的行業基本工資填充
data.fillna(method='ffill')#最近鄰插補--用缺失值的前一個值填充
data.fillna(method='pad') #最近鄰插補--用缺失值的前一個值填充
通過擬合函數來插補的方法:
主要說一說拉格朗日插值法吧,除了拉格朗日插值法,還有牛頓插值法、Hermite插值法、分段插值法和樣條插值法。有興趣的可以把后幾種方法的代碼也研究出來。
或者,也可以使用缺失值所在行的上一行填補缺失值
不處理缺失值
不處理就是不管,所以此處省略一萬字......
重復值處理
在Pandas中,.duplicated()表示找出重復的行,默認是判斷全部列,返回布爾類型的結果。對于完全沒有重復的行,返回
False,對于有重復的行,第一次出現的那一行返回 False,其余的返回 True。
與.duplicated()對應的,.drop_duplicates()表示去重,即刪除布爾類型為
True的所有行,默認是判斷全部列
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())#判斷是否有重復行,重復的顯示為TRUE,
examDf.drop_duplicates()#去掉重復行
#指定某列判斷是否有重復值
print(examDf.duplicated('name'))#判斷name列是否有重復行,重復的顯示為TRUE,
examDf.drop_duplicates('name')#去掉重復行
#根據多列判斷是否有重復值
print(examDf.duplicated(['name','sex','birthday']))#判斷name,sex,birthday列是否有重復行,重復的顯示為TRUE,
examDf.drop_duplicates(['name','sex','birthday'])#去掉重復行
此處只是放出代碼來.
異常值處理
數據清洗過程中的異常值的處理,是選擇剔除還是用其他值代替,需要視情況而定。有些異常值可能包含某些信息,需認真思考后采取處理方法。
常見的異常值處理辦法:
遍歷查找異常值,并根據規則調整大小
刪除異常值
import pandas
as pd #導入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())
視為缺失值后進行插補
#將工資低于1000或者高于10萬的異常值清空
data[u'工資'][(data[u'工資']<1000) | (data[u'工資']>100000)]
= None
#清空后用均值插補
print(data.fillna(data.mean()))
除了用均值插補之外還可以用中位數、眾數、最值、固定值、最近鄰值、拉格朗日等插值,具體方法往前翻,上面剛寫完。
OVER!
總結
以上是生活随笔為你收集整理的怎么用python处理数据_Python数据清洗 - 洗什么?怎么洗?看完就明白了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python拆分excel的sheet为
- 下一篇: python财务报表预测股票价格_机器学