篩選數值型的欄位問題
回答列表
-
2020/03/04 下午 06:07Mag贊同數:0不贊同數:0留言數:0
我反而是篩不到部分的float64
-
2020/03/04 下午 07:45李子明贊同數:6不贊同數:0留言數:2
把下面這行
app_train.dtypes.isin(dtype_select)
改為下面這行
app_train.dtypes.apply(str).isin(dtype_select)
原因是,你的dtype_select內容是str不是type。
另一種改法,把下面這行
dtype_select = ['int64', 'float64']
改為
dtype_select = [np.int64, np.float64]
或改為
dtype_select = [np.dtype('int64'), np.dtype('float64')]
這樣子就不會有潛在的型別問題。
-
2020/03/04 下午 11:56張維元 (WeiYuan)贊同數:0不贊同數:0留言數:0
這邊補充說明一下,在 Numpy 中有幾種表示數值的欄位:
1. int
2. int64
3. np.int64
4. np.dtype('float64')
當只用 int 的時候預設會等於你的電腦中最大的 int 數值,不同的電腦可能會有差異。另外 int64、np.int64、np.dtype('float64') 這三種寫法在用 == 比較的時候是等價的,但用 is/isin 判斷卻會錯。原因在於 is 是比較嚴格的物件比較,除了數值本身之外,也會比型態的差異。
舉個例子,這三種 int64、np.int64、np.dtype('float64') 都可以表達 int64,但他們分別是字串、np.int64、和 np.dtype 型態,因此在用 isin 的時候會出錯。所以這邊建議大家改用 dtype_select 來處理,會比較容易。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃