類別變數

用 Python 進行資料清理

Adel Nehme

Content Developer @DataCamp

可能會有哪種錯誤?

I) 值不一致

  • 不一致欄位: 'married''Maried''UNMARRIED''not married'
  • 尾端空白: 'married '' married '

II) 過度合併類別

  • 建立新群組: 由連續的家庭所得資料產生 0-20K20-40K 類別…
  • 重新映射群組: 將家庭所得類別映射為 2 類 'rich''poor'

III) 確保資料型別為 category(見第 1 章)

用 Python 進行資料清理

值一致性

大小寫差異: 'married''Married''UNMARRIED''unmarried'

# 取得婚姻狀況欄
marriage_status = demographics['marriage_status']
marriage_status.value_counts()
unmarried    352
married      268
MARRIED      204
UNMARRIED    176
dtype: int64
用 Python 進行資料清理

值一致性

# 取得 DataFrame 的值計數
marriage_status.groupby('marriage_status').count()
                 household_income  gender
marriage_status                          
MARRIED                       204     204
UNMARRIED                     176     176
married                       268     268
unmarried                     352     352
用 Python 進行資料清理

值一致性

# 全部轉大寫

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
用 Python 進行資料清理

值一致性

尾端空白: 'married ''married''unmarried'' unmarried'

# 取得婚姻狀況欄
marriage_status = demographics['marriage_status']
marriage_status.value_counts()
 unmarried   352
unmarried    268
married      204
married      176
dtype: int64
用 Python 進行資料清理

值一致性

# 去除所有空白
demographics = demographics['marriage_status'].str.strip()
demographics['marriage_status'].value_counts()
unmarried    528
married      472
用 Python 進行資料清理

將資料歸併成類別

由資料建立類別: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
..
用 Python 進行資料清理

將資料歸併成類別

由資料建立類別: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
用 Python 進行資料清理

將資料歸併成類別

將類別映射為更少的類別: 簡化類別欄。

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 進行資料清理

一起來練習吧!

用 Python 進行資料清理

Preparing Video For Download...