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.0 1.0 NaN 2.0 1.0 2.0 Y 透天厝 鋼筋混凝土造 3 870624.0 20.0 一層;二層;三層;屋頂突出物;騎樓 NaN NaN 大智路91~120號 鹽埕區 大智段
1 買賣 房地(土地+建物) 3.0 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 鋼筋混凝土造 12 681218.0 39.0 十層 NaN NaN 府北路1~30號 鹽埕區 府北段五小段
2 買賣 房地(土地+建物)+車位 1.0 1.0 1.0 3.0 2.0 2.0 Y 住宅大樓(11F含以上有電梯) 見其它登記事項 15 1070830.0 0.0 八層 0.0 0.0 建國四路151~180號 鹽埕區 興仁段
3 買賣 房地(土地+建物)+車位 1.0 1.0 1.0 3.0 2.0 2.0 Y 住宅大樓(11F含以上有電梯) 見其它登記事項 15 1070830.0 0.0 十五層 0.0 0.0 建國四路151~180號 鹽埕區 興仁段
4 買賣 房地(土地+建物)+車位 1.0 1.0 1.0 3.0 2.0 2.0 Y 住宅大樓(11F含以上有電梯) 見其它登記事項 15 1070830.0 0.0 十一層 0.0 0.0 建國四路151~180號 鹽埕區 興仁段

5 rows × 35 columns

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

In [2]:
df[df['代表建號主要建材'] == '鋼筋混凝土造']
Out[2]:
申報種類 交易標的種類 土地數量 建物數量 車位數量 幾房 幾廳 幾衛 有無隔間 建物型態 代表建號主要建材 代表建號總層數 代表建號建築完成日期 代表建號屋齡 代表建號層次 車位總價格 車位總持分面積 地建號範圍 行政區 地段
0 買賣 房地(土地+建物) 3.0 1.0 NaN 2.0 1.0 2.0 Y 透天厝 鋼筋混凝土造 3 870624.0 20.0 一層;二層;三層;屋頂突出物;騎樓 NaN NaN 大智路91~120號 鹽埕區 大智段
1 買賣 房地(土地+建物) 3.0 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 鋼筋混凝土造 12 681218.0 39.0 十層 NaN NaN 府北路1~30號 鹽埕區 府北段五小段
15 買賣 建物 NaN 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 鋼筋混凝土造 16 750217.0 33.0 七層 NaN NaN 北斗街1~30號 鹽埕區 鹽壽段
24 買賣 建物 NaN 1.0 NaN NaN NaN NaN N 住宅大樓(11F含以上有電梯) 鋼筋混凝土造 12 700114.0 38.0 八層 NaN NaN 府北路31~60號 鹽埕區 府北段五小段
25 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 2.0 Y 住宅大樓(11F含以上有電梯) 鋼筋混凝土造 12 721209.0 35.0 五層 NaN NaN 七賢三路31~60號 鹽埕區 興福段
9625 買賣 房地(土地+建物) 1.0 1.0 NaN 32.0 2.0 32.0 Y 農舍 鋼筋混凝土造 1 780116.0 30.0 一層;地下層 NaN NaN 新開61~90號 六龜區 不老段
9686 買賣 房地(土地+建物) 1.0 1.0 NaN 6.0 1.0 4.0 Y 其他 鋼筋混凝土造 2 890219.0 19.0 一層;二層;屋頂突出物 NaN NaN 新威241~270號 六龜區 新民庄段
9694 買賣 房地(土地+建物) 1.0 1.0 NaN NaN NaN NaN N 透天厝 鋼筋混凝土造 NaN 911024.0 16.0 一層;二層;三層 NaN NaN 光復路1~30號 六龜區 義寶段
9695 買賣 房地(土地+建物) 1.0 1.0 NaN 4.0 1.0 2.0 Y 透天厝 鋼筋混凝土造 2 730510.0 35.0 一層;二層 NaN NaN 林森路31巷1~30號 甲仙區 甲仙段
9701 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 3.0 Y 透天厝 鋼筋混凝土造 2 750805.0 33.0 一層;二層;騎樓 NaN NaN 仁愛路31~60號 甲仙區 公館段

5303 rows × 35 columns

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

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

In [3]:
df1 = df.copy()
df1.loc[df1['代表建號主要建材'] == '鋼筋混凝土造', '代表建號主要建材'] = '測試'
df1[df1['代表建號主要建材'] == '測試']
Out[3]:
申報種類 交易標的種類 土地數量 建物數量 車位數量 幾房 幾廳 幾衛 有無隔間 建物型態 代表建號主要建材 代表建號總層數 代表建號建築完成日期 代表建號屋齡 代表建號層次 車位總價格 車位總持分面積 地建號範圍 行政區 地段
0 買賣 房地(土地+建物) 3.0 1.0 NaN 2.0 1.0 2.0 Y 透天厝 測試 3 870624.0 20.0 一層;二層;三層;屋頂突出物;騎樓 NaN NaN 大智路91~120號 鹽埕區 大智段
1 買賣 房地(土地+建物) 3.0 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 測試 12 681218.0 39.0 十層 NaN NaN 府北路1~30號 鹽埕區 府北段五小段
15 買賣 建物 NaN 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 測試 16 750217.0 33.0 七層 NaN NaN 北斗街1~30號 鹽埕區 鹽壽段
24 買賣 建物 NaN 1.0 NaN NaN NaN NaN N 住宅大樓(11F含以上有電梯) 測試 12 700114.0 38.0 八層 NaN NaN 府北路31~60號 鹽埕區 府北段五小段
25 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 2.0 Y 住宅大樓(11F含以上有電梯) 測試 12 721209.0 35.0 五層 NaN NaN 七賢三路31~60號 鹽埕區 興福段
9625 買賣 房地(土地+建物) 1.0 1.0 NaN 32.0 2.0 32.0 Y 農舍 測試 1 780116.0 30.0 一層;地下層 NaN NaN 新開61~90號 六龜區 不老段
9686 買賣 房地(土地+建物) 1.0 1.0 NaN 6.0 1.0 4.0 Y 其他 測試 2 890219.0 19.0 一層;二層;屋頂突出物 NaN NaN 新威241~270號 六龜區 新民庄段
9694 買賣 房地(土地+建物) 1.0 1.0 NaN NaN NaN NaN N 透天厝 測試 NaN 911024.0 16.0 一層;二層;三層 NaN NaN 光復路1~30號 六龜區 義寶段
9695 買賣 房地(土地+建物) 1.0 1.0 NaN 4.0 1.0 2.0 Y 透天厝 測試 2 730510.0 35.0 一層;二層 NaN NaN 林森路31巷1~30號 甲仙區 甲仙段
9701 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 3.0 Y 透天厝 測試 2 750805.0 33.0 一層;二層;騎樓 NaN NaN 仁愛路31~60號 甲仙區 公館段

5303 rows × 35 columns

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

In [4]:
df1 = df.copy()
df1['代表建號主要建材'] = np.where(df1['代表建號主要建材'] == '鋼筋混凝土造', '測試', df1['代表建號主要建材'])
df1[df1['代表建號主要建材'] == '測試']
Out[4]:
申報種類 交易標的種類 土地數量 建物數量 車位數量 幾房 幾廳 幾衛 有無隔間 建物型態 代表建號主要建材 代表建號總層數 代表建號建築完成日期 代表建號屋齡 代表建號層次 車位總價格 車位總持分面積 地建號範圍 行政區 地段
0 買賣 房地(土地+建物) 3.0 1.0 NaN 2.0 1.0 2.0 Y 透天厝 測試 3 870624.0 20.0 一層;二層;三層;屋頂突出物;騎樓 NaN NaN 大智路91~120號 鹽埕區 大智段
1 買賣 房地(土地+建物) 3.0 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 測試 12 681218.0 39.0 十層 NaN NaN 府北路1~30號 鹽埕區 府北段五小段
15 買賣 建物 NaN 1.0 NaN 1.0 1.0 1.0 Y 套房(1房(1廳)1衛) 測試 16 750217.0 33.0 七層 NaN NaN 北斗街1~30號 鹽埕區 鹽壽段
24 買賣 建物 NaN 1.0 NaN NaN NaN NaN N 住宅大樓(11F含以上有電梯) 測試 12 700114.0 38.0 八層 NaN NaN 府北路31~60號 鹽埕區 府北段五小段
25 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 2.0 Y 住宅大樓(11F含以上有電梯) 測試 12 721209.0 35.0 五層 NaN NaN 七賢三路31~60號 鹽埕區 興福段
9625 買賣 房地(土地+建物) 1.0 1.0 NaN 32.0 2.0 32.0 Y 農舍 測試 1 780116.0 30.0 一層;地下層 NaN NaN 新開61~90號 六龜區 不老段
9686 買賣 房地(土地+建物) 1.0 1.0 NaN 6.0 1.0 4.0 Y 其他 測試 2 890219.0 19.0 一層;二層;屋頂突出物 NaN NaN 新威241~270號 六龜區 新民庄段
9694 買賣 房地(土地+建物) 1.0 1.0 NaN NaN NaN NaN N 透天厝 測試 NaN 911024.0 16.0 一層;二層;三層 NaN NaN 光復路1~30號 六龜區 義寶段
9695 買賣 房地(土地+建物) 1.0 1.0 NaN 4.0 1.0 2.0 Y 透天厝 測試 2 730510.0 35.0 一層;二層 NaN NaN 林森路31巷1~30號 甲仙區 甲仙段
9701 買賣 房地(土地+建物) 1.0 1.0 NaN 2.0 1.0 3.0 Y 透天厝 測試 2 750805.0 33.0 一層;二層;騎樓 NaN NaN 仁愛路31~60號 甲仙區 公館段

5303 rows × 35 columns

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

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

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

9761 rows × 35 columns

In [ ]:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *