既然咱們這個系列是對比Excel,那麼在Excel裏是怎麼查找重複值的呢?有不少種方法,這裏就簡單說一種:條件格式。在【開始】——【條件格式】裏選擇突出顯示重複值,就將重複的值突出顯示出來了:
ide
Pandas裏如何查找重複值呢?spa
繼以前用的短租數據集(後臺回覆:短租數據,便可得到),duplicated方法查找重複值,和isnull同樣,獲得的結果是布爾值,若是重複被標記爲True,不然爲False3d
# 查看全部列都重複的數據
df_list.duplicated()
結果以下,獲得的是一個序列,經過True/False來查看哪些行徹底重複。
code
也能夠把它具體的位置找出來:orm
# 定位出全部列都重複的行
df_list[df_list.duplicated()]
結果是一個空行,說明這個數據集裏沒有全部列都重複的行blog
對重複值的判斷有時不須要判斷全部列,只須要對某一列進行判斷,仍是用duplicated方法查找,如查找id列是否重複圖片
# 查找id列是否重複
df_list[df_list.duplicated(["id"])]
結果爲空,說明id列是惟一標識。ci
對重複值的處理,就是刪除pandas
在Excel裏專門有一個刪除重複值的功能,用這個功能就能夠將某一列的重複值刪除,只保留不重複的值:it
在Panda裏用到drop_duplicates方法來刪除重複值。
對全部列都重複的行去重
# 全部列去重
df_list = df_list.drop_duplicates()
df_list.head()
對某一列重複的行去重,添加subset參數
# 某一列去重
df_list.drop_duplicates(subset = "id")
對要去重的幾列的列名用列表框起來,subset參數名能夠不寫
# 某幾列去重
df_list.drop_duplicates(["id","name"])
以上去重時默認都是保留第一個重複的值,但若是想要保留最後一個重複的值呢,添加keep參數,讓keep = "last"
# 保留最後一個值
df_list.drop_duplicates(["id","name"],keep = "last")
前面介紹了查找重複值用到的duplicated方法,那麼也能夠用這個方法直接去重。df_list[df_list.duplicated(["id","name"])]是定位出重複值,加個取反的符號df_list[~df_list.duplicated(["id","name"])]就將不重複的值取出來了,也就是去重了。
# 查找後定位去重
df_list[~df_list.duplicated(["id","name"])]
這個案例裏last_review字段應該是日期時間的類型,但在這裏是字符型展現,所以要把字符型轉換成日期時間類型的數據,使用to_datetime方法,它有兩個參數,第一個參數是要轉換的列,第二個參數是設置日期時間格式。
# 字符轉時間
df_list["last_review"] = pd.to_datetime(df_list["last_review"],
format = "%Y/%m/%d")
df_list.info()
結果以下,能夠看到這一列已經由原先的字符型轉化爲了時間型。
類型轉換還能夠將字符轉數值,數值轉字符,用到astype(dtype)方法,dtype參數表示要轉換的數據類型,整型爲int,小數型位float,字符型爲str
# 數值轉字符
df_list["id"].astype(str).dtype
如把id列的整型轉爲字符型,能夠看到轉換話數據類型爲Object。
發現這裏neighbourhood字段是「朝陽區 / Chaoyang 」形式,只想要保留「/」符號前的字段,所以須要對這個字段進行拆分,在Excel裏拆分很簡單,就用【數據】選項卡中的【分列】功能便可,分割符號選擇「/」。
在pandas裏咱們用split方法來拆分
# 字段拆分
new_neighbor = df_list["neighbourhood"].str.split("/",1,True)
df_list[["neighborhood_new","neighbor2"]] = new_neighbor
df_list
第一個參數是指定分隔符,第二個參數填的是1,表示分割成1+1=2列,第三個參數填True,表示展開爲數據框,默認是False,因此通常填True,結果如圖
一樣地把room_type這個字段也拆分一下
new_room_type = df_list["room_type"].str.split("/",1,True)
df_list[["room_type_new","room_type2"]] = new_room_type
df_list
結果如圖: