【用 Pandas 比較方案】比較 iPhone12 相關的預購方案

學習於: 2021 年 1 月 6 號

這次練習的是比較iPhone12 相關的預購方案,學習來源:大樹數據YouTube

抓取 iPhone12 相關的預購方案,比較分析看哪個預購方案更優惠。

來到中華電信的 iPhone12 預購頁面會看到以下畫面。

往下滑會看到「精采5G購機方案」。

發現資料放在表格之中,

資料在 table,可以用更簡單的方式。

點擊 Headers,複製 URL。

import pandas as pd
dfs = pd.read_html('https://www.cht.com.tw/home/apple/iphone/index')

輸出 dfs[0]。

dfs[0]

把 dfs[0] 定義為 df。

輸出 df.head()。

df[df['月繳金額.1'].str.contains('個月')]
df['month'] = df['月繳金額.1'].str.extract('(\d+)個月')

輸出 df.head()。

df.head()

把月份填上。

df['month'] = df['month'].ffill()

輸出 df.head() 查看。

df.dropna(inplace=True)

輸出 df.head()。

df.head()
df[df['月繳金額.1'].str.contains('個月')]

去除月繳金額含「個月」的資訊。

df[~df['月繳金額.1'].str.contains('個月')] #~代表排除符合的資料
df2.head()
df2.columns
#輸出結果:
Index(['月繳金額', '月繳金額.1', '月繳金額.2', '$599', '$799', '$999', '$1199', '$1,399',
       '$1,599', '$1,799', '$2,699', 'month'],
      dtype='object')
df2.columns = ['購機優惠價', '機型', '容量', '$599', '$799', '$999', '$1199', '$1,399',
 '$1,599', '$1,799', '$2,699', 'month']

查看 df2.columns

df2.columns
Index(['購機優惠價', '機型', '容量', '$599', '$799', '$999', '$1199', '$1,399',
 '$1,599', '$1,799', '$2,699', 'month'],
 dtype='object')
pd.wide_to_long(df2,['$'],i=['購機優惠價', '機型', '容量', 'month'], j='monthly_price',suffix='[\d,]+')
pd.wide_to_long(df2,['$'],i=['購機優惠價', '機型', '容量', 'month'], j='monthly_price')
df3.head()
df3.reset_index(inplace=True)
df3.head()
df3[df3['$'] !='-']
df4 = df3[df3['$'] !='-']
df4.head()
df4.info() #了解資料型態
#發現monthly-price 都是字串,可能會有逗號出現
df4['month'] = df4['month'].astype(int)
df4['monthly_price'] = df4['monthly_price'].map(lambda e: int(e.replace(',','')))

把錢轉換成整數。

df4['$'] = df4['$'].astype(int)
df4.head()
df4['total_price'] = df4['$']+df4['month']*df4['monthly_price']
df4.head()

Leave a Comment

Your email address will not be published. Required fields are marked *