2024-09-01|閱讀時間 ‧ 約 22 分鐘

[Python]pandas資料探索與清理_處理缺失值

為了讓資料更適合進行後續的分析、建立模型,模型的決策準確性,資料探索與清理資料分析過程中非常重要的步驟,主要目的在於確保資料的品質和可靠性。

因為前幾篇的例子中的資料,並沒有缺失值與重複值的部分,我另外找了一份有包含的資料來做案例分析,由於找到的資料沒有重複值的部分,故本文主要解釋處理缺失值的部分,重複值再另外找一份有包含重複值的資料,在來解釋如何處理重複值的。


要對資料進行探索和清理,通常會進行以下幾個步驟:

  1. 了解資料結構
    • 查看資料的前幾行和資料摘要,以了解資料的結構、類型和缺失值情況。
  2. 處理缺失值
    • 根據需要填補或移除缺失值。
  3. 處理重複值
    • 檢查並移除重複的資料列。
  4. 資料類型轉換
    • 確保每個欄位的資料類型正確,如數值型、日期型等。
  5. 資料清理與轉換
    • 處理異常值,將資料標準化或正規化,並進行其他必要的轉換。
  6. 資料篩選與篩查
    • 根據探索結果篩選出有用的欄位與資料列。

案例分析

了解資料結構

import pandas as pd

df = pd.read_excel('Ditry Data Sample.xlsx')

# 顯示數據完整資訊
print(df.info())

從Non-Null Count這一列來看,是有存在空值的,也就是缺失值。

查看是否有缺失值或重複值

# 檢查是否有缺失值
print(df.isnull().sum())

缺失值是資料分析過程中常見的問題,處理缺失值的方法主要取決於缺失值的數量、分佈以及資料集的特性,對於某些特定的資料集缺失值可能是極具有意義的,例如在某些業務情境中,缺失本身可能代表特定的行為模式。(可能是不能回答)

常見的缺失值處理方法:

移除缺失值

  • 刪除含有缺失值的列 (dropna):當缺失值數量較少且不會影響分析結果時,可以選擇直接刪除含有缺失值的整列數據。
# 刪除含有缺失值的列
df_cleaned = df.dropna()
# 顯示被刪除後的資訊
print(df_cleaned.info())

此份資料刪除有缺失值的列,只少一筆資料,若這筆資料不是那麼重要,那麼刪除不會影響後續模型的結果。


  • 刪除含有缺失值的欄位:如果某個欄位中大部分數據都缺失,這個欄位可能對分析沒有太大價值,可以直接刪除。
# 刪除包含缺失值的欄位
df_cleaned = df.dropna(axis=1)
print(df_cleaned.info())

此份資料刪除包含缺失值的欄位,結果Spending_USD則被刪除了,所以要用其他方法來處理缺失值。

填補缺失值

  • 用統計量填補
    • 均值填補:使用該欄位的平均值填補缺失值,適用於數值型資料。
    • 中位數填補:使用該欄位的中位數填補,適用於資料有異常值或偏態的情況。
    • 眾數填補:使用該欄位的眾數填補,適用於類別型資料。
  • 插值法 (interpolation):對於時間序列資料或具有順序性的資料,可以使用插值方法根據已知值預測缺失值。
  • 前向填充與後向填充 (ffillbfill):用前一個有效值或後一個有效值填補缺失值,適用於時間序列資料。
  • 機器學習模型預測:利用回歸或分類模型預測並填補缺失值,這種方法較為複雜,但在某些情況下效果更好。

先找出缺失值那行的資料

# 找出有缺失值的行
rows_with_missing = df[df.isnull().any(axis=1)]

# 只顯示有缺失值的列
columns_with_missing = rows_with_missing.loc[:, df.isnull().any()]
print(columns_with_missing)
# 根據上面找到是在271行有缺失值
print(df.iloc[271])

原來是在2020年Great Britain少了一筆資料,那我們把Great Britain印出來來看,要用什麼方法處理缺失值比較恰當。

Great_Britain_data = df[df['Country'] == 'Great Britain']
print(Great_Britain_data)

由上面的資料來看,根據資料會隨著時間的變化,我們可以用插值法 (Interpolation)來補缺失值,也可以使用其他模型來預測,但這樣會相對複雜許多。

import pandas as pd

df = pd.read_csv('healthexp_uncleaned.csv')

# 插值法填補
df.interpolate(method='linear', inplace=True)

Great_Britain_data = df[df['Country'] == 'Great Britain']
print(Great_Britain_data)

這樣就順利的補了2020年這筆資料了。


後續在找有什麼資料,可以在說明更多補缺失值的方法,或者別人是怎麼做的案例。


分享至
成為作者繼續創作的動力吧!
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

作者的相關文章

螃蟹_crab的沙龍 的其他內容

你可能也想看

發表回應

成為會員 後即可發表留言
© 2024 vocus All rights reserved.