-1
我正在爲機器學習編寫一個數據預處理器,它需要將布爾數據視爲類別,而不是試圖將1視爲大於0.在導入csv表與Pandas DataFrame後,我想要確定列是布爾並將它們轉換爲布爾類型,而無需遍歷所有數字列來執行此操作。熊貓有意將布爾列解釋爲'int64',但我還沒有找到任何現有的方法來解決這個問題。如何檢測數值類型的數組是否只包含布爾值?
我試過numpy array safe casting,但它失敗,因爲不是檢查是否有不適合的布爾任何值,它只是拒絕任何類型垂頭喪氣,:
import pandas as pd
df = pd.DataFrame({'a':[1, 0, 1]})
numpy_array = df.values
safe_booleans = numpy_array.astype(bool, casting='safe')
不能從D投陣列(「的Int64」),根據該規則>「安全」
如果我刪除「安全」鑄造,然後它的工作原理D型(「布爾」),但我需要「安全」的,因爲還有非布爾列,否則astype會變成帶有los的布爾值的數據。
非常感謝,如果你能指出我的錯誤或建議其他方法將數值列/數組只有布爾值轉換爲布爾類型。
*「我想安全地下注,以便不將任何非布爾特性轉換爲布爾值。」*我很困惑。您嘗試轉換爲布爾值的值是否始終爲0和1?如果不是,你期望把結果轉換爲布爾值是什麼? –
astype的文檔中的註釋說:「從NumPy 1.9開始,如果在'safe'轉換模式下,要轉換的字符串dtype時間不足以保存integer/float數組的最大值,則astype方法現在會返回一個錯誤正在鑄造「。這很清楚:bool不能正確保存大於1的值,更不用說int64的最大值了。 – Evert
讓我們假設通過布爾值來表示你的意思是1或0,如果他們不是這樣的話,你希望行爲是什麼? –