資料採集完,要進行資料清洗工作,整個資料分析過程中,資料清洗工作幾乎要佔到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 ...