成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用 Python 清洗數據?

開發 后端 大數據
在做數據分析之前,我們首先要明確數據分析的目標,然后 應用數據分析的思維,對目標進行細分,再采取相應的行動。

[[333143]]

0. 序言

在做數據分析之前,我們首先要明確數據分析的目標,然后 應用數據分析的思維,對目標進行細分,再采取相應的行動。

我們可以把數據分析細分為以下 8 個步驟:

  • 讀取
  • 清洗
  • 操作
  • 轉換
  • 整理
  • 分析
  • 展現

(8)報告

在《 如何用 Python 讀取數據? 》這篇文章中,我們學習了從 5 種不同的地方讀取數據的方法,接下來,我們將利用其中的一種方法, 從 Excel 文件中讀取原始數據,然后利 用 Python 對它進行清洗。

下面我們用一副待清洗的撲克牌作為示例,假設它保存在代碼文件相同的目錄下,在 Jupyter Lab 環境中運行以下代碼:

  1. import numpy as np 
  2. import pandas as pd 
  3.  
  4. # 設置最多顯示 10 行 
  5. pd.set_option('max_rows', 10) 
  6.  
  7. # 從 Excel 文件中讀取原始數據 
  8. df = pd.read_excel( 
  9.     '待清洗的撲克牌數據集.xlsx' 
  10.  
  11. df 

返回結果如下:

 

如何用 Python 清洗數據?

這幅待清洗的撲克牌數據集,有一些異常情況,包括:大小王的花色是缺失的,有兩張重復的黑桃:spades: A,還有一張異常的 黑桃 :spades: 30。

1. 如何查找異常?

在正式開始清洗數據之前,往往需要先把異常數據找出來,觀察異常數據的特征,然后再決定清洗的方法。

  1. # 查找「花色」缺失的行 
  2. df[df.花色.isnull()] 

 

如何用 Python 清洗數據?

 

  1. # 查找完全重復的行 
  2. df[df.duplicated()]

 

如何用 Python 清洗數據?

 

  1. # 查找某一列重復的行 
  2. df[df.編號.duplicated()]

 

如何用 Python 清洗數據?
  1. # 查找牌面的所有唯一值 
  2. df.牌面.unique()

返回結果:

array(['大王', '小王', 'A', '30', 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 2, 3], dtype=object)

根據常識可以判斷,牌面為 30 的是異常值。

  1. # 查找「牌面」包含 30 的異常值 
  2. df[df.牌面.isin(['30'])] 

 

如何用 Python 清洗數據?

 

  1. # 查找王牌,模糊匹配 
  2. df[df.牌面.str.contains
  3.     '王', na=False 
  4. )] 

 

如何用 Python 清洗數據?

 

  1. # 查找編號在 1 到 5 之間的行 
  2. df[df.編號.between(1, 5)] 

 

如何用 Python 清洗數據?

查找某個區間,也可以用邏輯運算的方法來實現:

  1. # 查找編號在 1 到 5 之間的行 
  2. df[(df.編號 >= 1) 
  3.    & (df.編號 <= 5)] 

其中「 & 」代表必須同時滿足兩邊的條件,也就是「且」的意思。

還可以用下面等價的方法:

  1. # 查找編號在 1 到 5 之間的行 
  2. df[~((df.編號 < 1) 
  3.      | (df.編號 > 5))] 

其中「 | 」代表兩邊的條件滿足一個即可,也就是「或」的意思,「 ~ 」代表取反,也就是「非」的意思。

2. 如何排除重復?

使用 drop_duplicates() 函數,在排除重復之后,會得到一個新的數據框。

  1. # 排除完全重復的行,默認保留第一行 
  2. df.drop_duplicates() 

返回結果如下:

 

如何用 Python 清洗數據?

如果想要改變原來的數據框,有兩種方法,一種方法,是增加 inplace 參數:

  1. # 排除重復后直接替換原來的數據框 
  2. df.drop_duplicates( 
  3.     inplace=True 

另一種方法,是把得到的結果,重新賦值給原來的數據框:

  1. # 排除重復后,重新賦值給原來的數據框 
  2. df = df.drop_duplicates() 

如果想要按某一列排除重復的數據,那么指定相應的列名即可。

  1. # 按某一列排除重復,默認保留第一行 
  2. df.drop_duplicates(['花色']) 

 

如何用 Python 清洗數據?

如果想要保留重復的最后一行,那么需要指定 keep 參數。

  1. # 按某一列排除重復,并保留最后一行 
  2. df.drop_duplicates( 
  3.     ['花色'], keep='last' 

 

如何用 Python 清洗數據?

從上面兩個返回結果的編號可以看出,不同方法的差異情況。

3. 如何刪除缺失?

使用 dropna() 函數,默認刪除包含缺失的行。為了更加簡單易懂,我們用撲克牌中不重復的花色作為示例。

  1. # 不重復的花色 
  2. color = df.drop_duplicates( 
  3.     ['花色'
  4.  
  5. color 

 

如何用 Python 清洗數據?

 

  1. # 刪除包含缺失值的行 
  2. color.dropna() 

 

如何用 Python 清洗數據?

如果想要刪除整行全部為空的行,那么需要指定 how 參數。

  1. # 刪除全部為空的行 
  2. color.dropna(how='all'

 

如何用 Python 清洗數據?

如果想要刪除包含缺失值的列,那么需要指定 axis 參數。

  1. # 刪除包含缺失值的列 
  2. color.dropna(axis=1) 

 

如何用 Python 清洗數據?

可以看到,包含缺失值的「花色」這一列被刪除了。

4. 如何補全缺失?

使用 fillna() 函數,可以將缺失值填充為我們指定的值。

  1. # 補全缺失值 
  2. color.fillna('Joker'

 

如何用 Python 清洗數據?

可以看到,原來的 NaN 被填充為 Joker,在實際工作的應用中,通常填充為 0,也就是說, fillna(0) 是比較常見的用法。

如果想要使用臨近的值來填充,那么需要指定 method 參數,例如:

  1. # 用后面的值填充 
  2. color.fillna(method='bfill'

 

如何用 Python 清洗數據?

可以看到,原來第一行的 NaN 替換成了第二行的「黑桃:spades:」。

其中 method 還有一些其他的可選參數,詳情可以查看相關的幫助文檔。

還有一種按字典填充的方法。為了讓下面的演示更加直觀易懂,我們先把索引為 2 的牌面設置為缺失值:

  1. # 為了演示,先指定一個缺失值 
  2. color.loc[2, '牌面'] = np.nan 
  3.  
  4. color 

 

如何用 Python 清洗數據?

 

  1. # 按列自定義補全缺失值 
  2. color.fillna( 
  3.     {'花色': 0, '牌面': 1} 

 

如何用 Python 清洗數據?

可以看出,不同列的缺失值,可以填充為不同的值,花色這一列填充為 0,牌面這一列填充為 1,我在圖中分別用紅色的方框標記出來了。

5. 應用案例

下面 我們用 Python 代碼,把這幅待清洗的撲克牌數據集,變成一副正常的撲克牌數據。

  1. import numpy as np 
  2. import pandas as pd 
  3.  
  4. # 設置最多顯示 10 行 
  5. pd.set_option('max_rows', 10) 
  6.  
  7. # 從 Excel 文件中讀取原始數據 
  8. df = pd.read_excel( 
  9.     '待清洗的撲克牌數據集.xlsx' 
  10.  
  11. # 補全缺失值 
  12. df = df.fillna('Joker'
  13.  
  14. # 排除重復值 
  15. df = df.drop_duplicates() 
  16.  
  17. # 修改異常值 
  18. df.loc[4, '牌面'] = 3 
  19.  
  20. # 增加一張缺少的牌 
  21. df = df.append( 
  22.     {'編號': 4, 
  23.      '花色''黑桃♠'
  24.      '牌面': 2}, 
  25.     ignore_index=True 
  26.  
  27. # 按編號排序 
  28. df = df.sort_values('編號'
  29.  
  30. # 重置索引 
  31. df = df.reset_index() 
  32.  
  33. # 刪除多余的列 
  34. df = df.drop
  35.     ['index'], axis=1 
  36.  
  37. # 把清洗好的數據保存到 Excel 文件 
  38. df.to_excel( 
  39.     '完成清洗的撲克牌數據.xlsx'
  40.     index=False 
  41.  
  42. df 

返回結果如下:

  • 可以看到,我們已經成功地把它變成了一副正常的撲克牌數據。

6. 小結

我們簡單回顧一下本文的主要內容,首先,我們從宏觀層面介紹了數據分析的 8 個步驟,然后用一副待清洗的撲克牌數據集作為示例,從讀取數據,到查找異常,再到排除重復、刪除缺失和補全缺失,最后,我們用一個案例, 完整 演示了清洗數據的過程。

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2024-10-28 12:57:36

Pandas數據清洗

2020-11-06 17:42:02

Python開發工具

2019-01-15 14:21:13

Python數據分析數據

2013-03-20 15:49:28

大數據

2024-12-19 15:00:00

數據清洗Python

2018-03-27 18:12:12

PythonHTML

2023-02-08 07:09:40

PythonChatGPT語言模型

2021-03-18 10:21:45

數據科學大數據機器學習

2021-12-02 09:00:00

數據庫NoSQLWeb

2022-06-27 17:40:14

大數據數據科學

2016-02-17 15:15:01

2024-01-29 18:06:39

SQL數據格式

2020-11-02 08:15:00

Python數據開發

2022-03-28 14:08:02

Python數據清洗數據集

2014-09-22 19:30:02

大數據軟件分析金融數據

2018-05-17 10:05:24

運行iPadPython

2019-11-28 09:23:17

Python機器學習數據庫

2020-05-09 10:38:31

Python透視表數據

2020-12-10 10:46:23

PythonExcel圖片

2010-06-30 10:52:12

snmp服務Cacti
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕二区 | 午夜a级理论片915影院 | 中文字幕第一页在线 | 色香蕉在线 | 啪啪精品| 免费毛片www com cn | 91高清免费 | 新超碰97 | 天天操操 | 日韩国产欧美一区 | 日韩在线免费播放 | 一级a爱片性色毛片免费 | 亚洲精品中文字幕在线观看 | 日韩精品一区二区三区中文字幕 | 国产精品国产三级国产aⅴ原创 | 九九热视频这里只有精品 | av一二三区| 伊人婷婷 | 在线国产一区 | 嫩草视频在线免费观看 | 天天拍天天色 | 久草青青草 | 国产精品久久久av | 亚洲精品一区在线 | 久久一区二区三区免费 | 国产精品久久久久久久久久久新郎 | 成人精品视频99在线观看免费 | 日韩视频在线播放 | 国内精品视频免费观看 | 欧美成人高清视频 | 一区二区三区四区毛片 | 精品视频在线播放 | 成人一区二区三区在线 | 黄色小视频大全 | 免费看91 | 国产午夜精品福利 | 国产一区二区三区免费视频 | 亚洲视频在线观看 | 日韩精品一区在线 | 国产精品久久久久久一区二区三区 | 成人在线中文 |