第十一講 資料清洗

2021-09-08 16:00:03 字數 3464 閱讀 1683

資料採集完,要進行資料清洗工作,整個資料分析過程中,資料清洗工作幾乎要佔到80%的時間。

資料清洗規則總結為四個關鍵點:「完全合一」。

1、完整性:單條資料是否存在空值,統計的字段是否完善。

2、全面性:觀察某一列的全部數值,比如平均值、最大值、最小值,根據常識判斷是否有問題。如:資料定義、單位標識、數值本身。

3、合法性:資料的型別、內容、大小的合法性。如:存在非ascii字元、性別未知、年齡過高等等。

4、唯一性:資料是否重覆記錄,行資料及列資料都要是唯一的。

問題1: 缺失值

df1.isnull().any() #判斷哪列有空值

因為數值量較大,有些資料沒有採集到,可以採用以下三種方法:

問題2:空行

#刪除全空的行

df.dropna(how=

'all'

,inplace=

true

)

問題:列單位不統一乙個資料表如下:

表中體重與身高的單位不一致。需進行轉換,**如下:

import pandas as pd

df1=pd.read_excel(

"c:\\users\\五月\\desktop\\test\\test.xlsx"

)rows_with_jins=df1[

'體重'].

str.contains(

'jin'

).fillna(

false

)for i,jin_row in df1[rows_with_jins]

.iterrows():

#iterrows()屬於dataframe(資料框)的遍歷函式

weight=

int(

float

(jin_row[

'體重'][

:-3]

)/2)

#這裡有字串到float再到int的轉換

df1.at[i,

'體重']=

'{}kg'

.format

(weight)

#at[index,column]獲取某個位置的值

#將m轉化為cm,採取的方法是將包含cm的剔除

rows_with_cms=df1[

'身高'].

str.contains(

'cm'

).fillna(

false

)rows_with_ms =(1

-rows_with_cms)

.astype(np.

bool

)#布林型陣列取反,將上句用"~"也同樣能取反

for i,height in df1[rows_with_ms]

.iterrows():

m=float

(height[

'身高'][

:-1]

)*100#這裡的轉換必須先將去掉m的字串轉換成float

df1.at[i,

'身高']=

iterrows() 橫向遍歷

布林型陣列取反操作,numpy中取反運算子~可以將boolean型別值取反,更簡單

關於字元的轉換:

有關df.at和loc

最後規範的**:

ps.表是將cm轉換成m,而將m轉換成cm出現了以上一些問題,列出來以供學習和參考。

在過程中發現很多問題,原因是python基礎不行,接下來要系統學習python語句,主要使用的書籍及github上的**:

利用python進行資料分析

問題:非ascii字元

可以用刪除或者替換的方式來解決非ascii問題,正規表示式,這是乙個字串,前面的乙個 r 表示字串為非轉義的原始字串,讓編譯器忽略反斜槓,也就是忽略轉義字元。^表示「非」,\x00-\x7f是ascii十六進製制的範圍(0-127d),+表示多個字元進行匹配。

df[

'name'

].replace(

,regex=

true

, inplace=

true

)

問題1:一列有多個引數如將姓名列拆分成firstname和lastname兩個字段,以達到資料整潔的目的。

df[

['first_name'

,'last_name']]

=df[

'name'].

str.split(

' ',expand=

true

)#expand=true引數將字串拆分成多列,返回乙個資料框,預設false。' '引數可省。

df.drop(

'name'

,axis=

1,inplace=

true

)#刪除源資料列

問題2:重複資料

df4.drop_duplicates(

['first_name'

,'last_name'

],inplace=

true

)

第十一講 過載

過載單目運算子 單目運算子只有乙個運算元 如 a,b,i,j 等 因此過載函式只有乙個引數,如果過載函式為成員函式,還可以省約此引數。例 將 過載成友元函式。單目運算子一般過載為成員函式 include class complex void show complex operator complex...

第十一講 if分支語句

1 if單分支 語法結構 if 條件 code.code.注 1,條件是表示式,不需要用括號括起來 2,條件的結束要有冒號 3,語句塊沒有花括號,而是由統一的縮進來實現 eg1 count 89 if count 80 條件是表示式,不需要用括號括起來 print larger then 80 eg...

第十一講 外觀模式

facade模式也叫外觀模式,是由gof提出的23中設計模式中的一種。facade模式為一組具有類似功能的類群,比如類庫,子系統等等,提供乙個一致的簡單的介面。這個一致的簡單的介面被稱作facade。a子系統 public class systema package test.com.facade ...