用 Python 進行資料清理
Adel Nehme
Content Developer @DataCamp
I) 值不一致
'married'、'Maried'、'UNMARRIED'、'not married'…'married '、' married '…II) 過度合併類別
0-20K、20-40K 類別…'rich'、'poor'III) 確保資料型別為 category(見第 1 章)
大小寫差異: 'married'、'Married'、'UNMARRIED'、'unmarried'…
# 取得婚姻狀況欄
marriage_status = demographics['marriage_status']
marriage_status.value_counts()
unmarried 352
married 268
MARRIED 204
UNMARRIED 176
dtype: int64
# 取得 DataFrame 的值計數
marriage_status.groupby('marriage_status').count()
household_income gender
marriage_status
MARRIED 204 204
UNMARRIED 176 176
married 268 268
unmarried 352 352
# 全部轉大寫marriage_status['marriage_status'] = marriage_status['marriage_status'].str.upper() marriage_status['marriage_status'].value_counts()
UNMARRIED 528
MARRIED 472
# 全部轉小寫marriage_status['marriage_status'] = marriage_status['marriage_status'].str.lower() marriage_status['marriage_status'].value_counts()
unmarried 528
married 472
尾端空白: 'married '、'married'、'unmarried'、' unmarried'…
# 取得婚姻狀況欄
marriage_status = demographics['marriage_status']
marriage_status.value_counts()
unmarried 352
unmarried 268
married 204
married 176
dtype: int64
# 去除所有空白
demographics = demographics['marriage_status'].str.strip()
demographics['marriage_status'].value_counts()
unmarried 528
married 472
由資料建立類別: 從 income 欄建立 income_group 欄。
# 使用 qcut()
import pandas as pd
group_names = ['0-200K', '200K-500K', '500K+']
demographics['income_group'] = pd.qcut(demographics['household_income'], q = 3,
labels = group_names)
# 列印 income_group 欄
demographics[['income_group', 'household_income']]
category household_income
0 200K-500K 189243
1 500K+ 778533
..
由資料建立類別: 從 income 欄建立 income_group 欄。
# 使用 cut():建立區間與名稱
ranges = [0,200000,500000,np.inf]
group_names = ['0-200K', '200K-500K', '500K+']
# 建立 income_group 欄
demographics['income_group'] = pd.cut(demographics['household_income'], bins=ranges,
labels=group_names)
demographics[['income_group', 'household_income']]
category Income
0 0-200K 189243
1 500K+ 778533
將類別映射為更少的類別: 簡化類別欄。
operating_system 欄目前是:'Microsoft', 'MacOS', 'IOS', 'Android', 'Linux'`
operating_system 欄應改為:'DesktopOS', 'MobileOS'`
# 建立映射字典並取代
mapping = {'Microsoft':'DesktopOS', 'MacOS':'DesktopOS', 'Linux':'DesktopOS',
'IOS':'MobileOS', 'Android':'MobileOS'}
devices['operating_system'] = devices['operating_system'].replace(mapping)
devices['operating_system'].unique()
array(['DesktopOS', 'MobileOS'], dtype=object)
用 Python 進行資料清理