2020年11月13日 星期五

Python numpy.where (np.where) 應用實例

 

線上讀取高雄市108年第1季不動產買賣實價登錄資料

In [1]:
import pandas as pd
import numpy as np

# 線上讀取高雄市108年第1季不動產買賣實價登錄資料
url="https://data.kcg.gov.tw/dataset/f91cb647-ab05-4474-9687-d918421ca3a4/resource/b087aca4-3b37-45f9-9c32-f72bcb6f148b/download/e00mei-yi03open-data-10801utf8open-data1080101-1080331.csv"
df = pd.read_csv(url)
df.head()
Out[1]:
申報種類交易標的種類土地數量建物數量車位數量幾房幾廳幾衛有無隔間建物型態...代表建號主要建材代表建號總層數代表建號建築完成日期代表建號屋齡代表建號層次車位總價格車位總持分面積地建號範圍行政區地段
0買賣房地(土地+建物)3.01.0NaN2.01.02.0Y透天厝...鋼筋混凝土造3870624.020.0一層;二層;三層;屋頂突出物;騎樓NaNNaN大智路91~120號鹽埕區大智段
1買賣房地(土地+建物)3.01.0NaN1.01.01.0Y套房(1房(1廳)1衛)...鋼筋混凝土造12681218.039.0十層NaNNaN府北路1~30號鹽埕區府北段五小段
2買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...見其它登記事項151070830.00.0八層0.00.0建國四路151~180號鹽埕區興仁段
3買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...見其它登記事項151070830.00.0十五層0.00.0建國四路151~180號鹽埕區興仁段
4買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...見其它登記事項151070830.00.0十一層0.00.0建國四路151~180號鹽埕區興仁段

5 rows × 35 columns

首先將「代表建號主要建材」為「鋼筋混凝土造」的資料找出來,總共有5303筆

In [2]:
df[df['代表建號主要建材'] == '鋼筋混凝土造']
Out[2]:
申報種類交易標的種類土地數量建物數量車位數量幾房幾廳幾衛有無隔間建物型態...代表建號主要建材代表建號總層數代表建號建築完成日期代表建號屋齡代表建號層次車位總價格車位總持分面積地建號範圍行政區地段
0買賣房地(土地+建物)3.01.0NaN2.01.02.0Y透天厝...鋼筋混凝土造3870624.020.0一層;二層;三層;屋頂突出物;騎樓NaNNaN大智路91~120號鹽埕區大智段
1買賣房地(土地+建物)3.01.0NaN1.01.01.0Y套房(1房(1廳)1衛)...鋼筋混凝土造12681218.039.0十層NaNNaN府北路1~30號鹽埕區府北段五小段
15買賣建物NaN1.0NaN1.01.01.0Y套房(1房(1廳)1衛)...鋼筋混凝土造16750217.033.0七層NaNNaN北斗街1~30號鹽埕區鹽壽段
24買賣建物NaN1.0NaNNaNNaNNaNN住宅大樓(11F含以上有電梯)...鋼筋混凝土造12700114.038.0八層NaNNaN府北路31~60號鹽埕區府北段五小段
25買賣房地(土地+建物)1.01.0NaN2.01.02.0Y住宅大樓(11F含以上有電梯)...鋼筋混凝土造12721209.035.0五層NaNNaN七賢三路31~60號鹽埕區興福段
..................................................................
9625買賣房地(土地+建物)1.01.0NaN32.02.032.0Y農舍...鋼筋混凝土造1780116.030.0一層;地下層NaNNaN新開61~90號六龜區不老段
9686買賣房地(土地+建物)1.01.0NaN6.01.04.0Y其他...鋼筋混凝土造2890219.019.0一層;二層;屋頂突出物NaNNaN新威241~270號六龜區新民庄段
9694買賣房地(土地+建物)1.01.0NaNNaNNaNNaNN透天厝...鋼筋混凝土造NaN911024.016.0一層;二層;三層NaNNaN光復路1~30號六龜區義寶段
9695買賣房地(土地+建物)1.01.0NaN4.01.02.0Y透天厝...鋼筋混凝土造2730510.035.0一層;二層NaNNaN林森路31巷1~30號甲仙區甲仙段
9701買賣房地(土地+建物)1.01.0NaN2.01.03.0Y透天厝...鋼筋混凝土造2750805.033.0一層;二層;騎樓NaNNaN仁愛路31~60號甲仙區公館段

5303 rows × 35 columns

如果我們要把「代表建號主要建材」為「鋼筋混凝土造」,改成「測試」,可以使用下列二種方式:

第一種:使用Pandas篩選條件方式。

In [3]:
df1 = df.copy()
df1.loc[df1['代表建號主要建材'] == '鋼筋混凝土造', '代表建號主要建材'] = '測試'
df1[df1['代表建號主要建材'] == '測試']
Out[3]:
申報種類交易標的種類土地數量建物數量車位數量幾房幾廳幾衛有無隔間建物型態...代表建號主要建材代表建號總層數代表建號建築完成日期代表建號屋齡代表建號層次車位總價格車位總持分面積地建號範圍行政區地段
0買賣房地(土地+建物)3.01.0NaN2.01.02.0Y透天厝...測試3870624.020.0一層;二層;三層;屋頂突出物;騎樓NaNNaN大智路91~120號鹽埕區大智段
1買賣房地(土地+建物)3.01.0NaN1.01.01.0Y套房(1房(1廳)1衛)...測試12681218.039.0十層NaNNaN府北路1~30號鹽埕區府北段五小段
15買賣建物NaN1.0NaN1.01.01.0Y套房(1房(1廳)1衛)...測試16750217.033.0七層NaNNaN北斗街1~30號鹽埕區鹽壽段
24買賣建物NaN1.0NaNNaNNaNNaNN住宅大樓(11F含以上有電梯)...測試12700114.038.0八層NaNNaN府北路31~60號鹽埕區府北段五小段
25買賣房地(土地+建物)1.01.0NaN2.01.02.0Y住宅大樓(11F含以上有電梯)...測試12721209.035.0五層NaNNaN七賢三路31~60號鹽埕區興福段
..................................................................
9625買賣房地(土地+建物)1.01.0NaN32.02.032.0Y農舍...測試1780116.030.0一層;地下層NaNNaN新開61~90號六龜區不老段
9686買賣房地(土地+建物)1.01.0NaN6.01.04.0Y其他...測試2890219.019.0一層;二層;屋頂突出物NaNNaN新威241~270號六龜區新民庄段
9694買賣房地(土地+建物)1.01.0NaNNaNNaNNaNN透天厝...測試NaN911024.016.0一層;二層;三層NaNNaN光復路1~30號六龜區義寶段
9695買賣房地(土地+建物)1.01.0NaN4.01.02.0Y透天厝...測試2730510.035.0一層;二層NaNNaN林森路31巷1~30號甲仙區甲仙段
9701買賣房地(土地+建物)1.01.0NaN2.01.03.0Y透天厝...測試2750805.033.0一層;二層;騎樓NaNNaN仁愛路31~60號甲仙區公館段

5303 rows × 35 columns

第二種:使用numpy.where篩選條件方式。

In [4]:
df1 = df.copy()
df1['代表建號主要建材'] = np.where(df1['代表建號主要建材'] == '鋼筋混凝土造', '測試', df1['代表建號主要建材'])
df1[df1['代表建號主要建材'] == '測試']
Out[4]:
申報種類交易標的種類土地數量建物數量車位數量幾房幾廳幾衛有無隔間建物型態...代表建號主要建材代表建號總層數代表建號建築完成日期代表建號屋齡代表建號層次車位總價格車位總持分面積地建號範圍行政區地段
0買賣房地(土地+建物)3.01.0NaN2.01.02.0Y透天厝...測試3870624.020.0一層;二層;三層;屋頂突出物;騎樓NaNNaN大智路91~120號鹽埕區大智段
1買賣房地(土地+建物)3.01.0NaN1.01.01.0Y套房(1房(1廳)1衛)...測試12681218.039.0十層NaNNaN府北路1~30號鹽埕區府北段五小段
15買賣建物NaN1.0NaN1.01.01.0Y套房(1房(1廳)1衛)...測試16750217.033.0七層NaNNaN北斗街1~30號鹽埕區鹽壽段
24買賣建物NaN1.0NaNNaNNaNNaNN住宅大樓(11F含以上有電梯)...測試12700114.038.0八層NaNNaN府北路31~60號鹽埕區府北段五小段
25買賣房地(土地+建物)1.01.0NaN2.01.02.0Y住宅大樓(11F含以上有電梯)...測試12721209.035.0五層NaNNaN七賢三路31~60號鹽埕區興福段
..................................................................
9625買賣房地(土地+建物)1.01.0NaN32.02.032.0Y農舍...測試1780116.030.0一層;地下層NaNNaN新開61~90號六龜區不老段
9686買賣房地(土地+建物)1.01.0NaN6.01.04.0Y其他...測試2890219.019.0一層;二層;屋頂突出物NaNNaN新威241~270號六龜區新民庄段
9694買賣房地(土地+建物)1.01.0NaNNaNNaNNaNN透天厝...測試NaN911024.016.0一層;二層;三層NaNNaN光復路1~30號六龜區義寶段
9695買賣房地(土地+建物)1.01.0NaN4.01.02.0Y透天厝...測試2730510.035.0一層;二層NaNNaN林森路31巷1~30號甲仙區甲仙段
9701買賣房地(土地+建物)1.01.0NaN2.01.03.0Y透天厝...測試2750805.033.0一層;二層;騎樓NaNNaN仁愛路31~60號甲仙區公館段

5303 rows × 35 columns

numpy.where有另外一個優勢,是依篩選條件找出來的資料改成特定值,然後將「非篩選條件的資料」改成其他值。

以上例而言,我們可以把「代表建號主要建材」為「鋼筋混凝土造」的值改成「測試」,然後將非「鋼筋混凝土造」的值改成「鋼構」,一次寫入二個值

In [5]:
df1 = df.copy()
df1['代表建號主要建材'] = np.where(df1['代表建號主要建材'] == '鋼筋混凝土造', '測試', '鋼構')
df1
Out[5]:
申報種類交易標的種類土地數量建物數量車位數量幾房幾廳幾衛有無隔間建物型態...代表建號主要建材代表建號總層數代表建號建築完成日期代表建號屋齡代表建號層次車位總價格車位總持分面積地建號範圍行政區地段
0買賣房地(土地+建物)3.01.0NaN2.01.02.0Y透天厝...測試3870624.020.0一層;二層;三層;屋頂突出物;騎樓NaNNaN大智路91~120號鹽埕區大智段
1買賣房地(土地+建物)3.01.0NaN1.01.01.0Y套房(1房(1廳)1衛)...測試12681218.039.0十層NaNNaN府北路1~30號鹽埕區府北段五小段
2買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...鋼構151070830.00.0八層0.00.0建國四路151~180號鹽埕區興仁段
3買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...鋼構151070830.00.0十五層0.00.0建國四路151~180號鹽埕區興仁段
4買賣房地(土地+建物)+車位1.01.01.03.02.02.0Y住宅大樓(11F含以上有電梯)...鋼構151070830.00.0十一層0.00.0建國四路151~180號鹽埕區興仁段
..................................................................
9756買賣土地2.0NaNNaNNaNNaNNaNYNaN...鋼構NaNNaNNaNNaNNaNNaN勤和段271~300地號桃源區勤和段
9757買賣土地1.0NaNNaNNaNNaNNaNYNaN...鋼構NaNNaNNaNNaNNaNNaN瑪雅段271~300地號那瑪夏區瑪雅段
9758買賣土地1.0NaNNaNNaNNaNNaNYNaN...鋼構NaNNaNNaNNaNNaNNaN南沙魯段211~240地號那瑪夏區南沙魯段
9759買賣土地1.0NaNNaNNaNNaNNaNYNaN...鋼構NaNNaNNaNNaNNaNNaN達卡努瓦段1231~1260地號那瑪夏區達卡努瓦段
9760買賣土地1.0NaNNaNNaNNaNNaNYNaN...鋼構NaNNaNNaNNaNNaNNaN瑪雅段391~420地號那瑪夏區瑪雅段

9761 rows × 35 columns

In [ ]:
 

沒有留言:

【公告】網站遷移,未來內容將發表於新網站!!

 受限於blogger本身架構與限制,本網站所有內容已遷移至新網站,網址如下: https://kuo.us.to/wordpress/