日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

如何用 Python 清洗數據?

 

0. 序言

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

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

(1)讀取

(2) 清洗

(3) 操作

(4) 轉換

(5) 整理

(6) 分析

(7) 展現

(8)報告

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

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

import numpy as np
import pandas as pd

# 設置最多顯示 10 行
pd.set_option('max_rows', 10)

# 從 Excel 文件中讀取原始數據
df = pd.read_excel(
    '待清洗的撲克牌數據集.xlsx'
)

df

返回結果如下:

如何用 Python 清洗數據?

 

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

1. 如何查找異常?

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

# 查找「花色」缺失的行
df[df.花色.isnull()]
如何用 Python 清洗數據?

 

# 查找完全重復的行
df[df.duplicated()]
如何用 Python 清洗數據?

 

# 查找某一列重復的行
df[df.編號.duplicated()]
如何用 Python 清洗數據?

 

# 查找牌面的所有唯一值
df.牌面.unique()

返回結果:

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

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

# 查找「牌面」包含 30 的異常值
df[df.牌面.isin(['30'])]
如何用 Python 清洗數據?

 

# 查找王牌,模糊匹配
df[df.牌面.str.contains(
    '王', na=False
)]
如何用 Python 清洗數據?

 

# 查找編號在 1 到 5 之間的行
df[df.編號.between(1, 5)]
如何用 Python 清洗數據?

 

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

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

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

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

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

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

2. 如何排除重復?

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

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

返回結果如下:

如何用 Python 清洗數據?

 

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

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

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

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

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

# 按某一列排除重復,默認保留第一行
df.drop_duplicates(['花色'])
如何用 Python 清洗數據?

 

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

# 按某一列排除重復,并保留最后一行
df.drop_duplicates(
    ['花色'], keep='last'
)
如何用 Python 清洗數據?

 

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

3. 如何刪除缺失?

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

# 不重復的花色
color = df.drop_duplicates(
    ['花色']
)

color
如何用 Python 清洗數據?

 

# 刪除包含缺失值的行
color.dropna()
如何用 Python 清洗數據?

 

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

# 刪除全部為空的行
color.dropna(how='all')
如何用 Python 清洗數據?

 

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

# 刪除包含缺失值的列
color.dropna(axis=1)
如何用 Python 清洗數據?

 

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

4. 如何補全缺失?

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

# 補全缺失值
color.fillna('Joker')
如何用 Python 清洗數據?

 

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

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

# 用后面的值填充
color.fillna(method='bfill')
如何用 Python 清洗數據?

 

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

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

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

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

color
如何用 Python 清洗數據?

 

# 按列自定義補全缺失值
color.fillna(
    {'花色': 0, '牌面': 1}
)
如何用 Python 清洗數據?

 

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

5. 應用案例

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

import numpy as np
import pandas as pd

# 設置最多顯示 10 行
pd.set_option('max_rows', 10)

# 從 Excel 文件中讀取原始數據
df = pd.read_excel(
    '待清洗的撲克牌數據集.xlsx'
)

# 補全缺失值
df = df.fillna('Joker')

# 排除重復值
df = df.drop_duplicates()

# 修改異常值
df.loc[4, '牌面'] = 3

# 增加一張缺少的牌
df = df.Append(
    {'編號': 4,
     '花色': '黑桃♠',
     '牌面': 2},
    ignore_index=True
)

# 按編號排序
df = df.sort_values('編號')

# 重置索引
df = df.reset_index()

# 刪除多余的列
df = df.drop(
    ['index'], axis=1
)

# 把清洗好的數據保存到 Excel 文件
df.to_excel(
    '完成清洗的撲克牌數據.xlsx',
    index=False
)

df

返回結果如下:

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

6. 小結

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

文章作者: 林驥

分享到:
標簽:清洗 數據 Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定