나는 부울 데이터를 카테고리로 취급하고 1보다 큰 것을 보지 않아야하는 기계 학습을위한 데이터 전처리기를 작성하고 있습니다. Pandas DataFrame을 사용하여 csv 테이블을 가져온 후 부울 이를 수행하기 위해 모든 숫자 열을 반복하지 않고 부울 유형으로 변환 할 수 있습니다. 팬더는 의도적으로 부울 열을 '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')
'안전한'캐스팅을 제거하면 작동하지만 '안전'해야하기 때문에 dtype ('int64')에서 dtype ('bool')으로 배열을 변환 할 수 없습니다. 비 - 불린 (non-boolean) 열도 있습니다. 그렇지 않으면 astype은 los가있는 부울 (boolean)이됩니다. 데이터의
내 실수를 지적하거나 불리언 값만있는 숫자 열/배열을 부울 유형으로 바꾸는 다른 방법을 제안하면 많은 도움이됩니다. 지금은
* "부울이 아닌 기능을 부울로 변환하지 않으려면 안전하게 다운 캐스트하고 싶습니다."* 혼란 스럽습니다. 부울 값을 항상 0과 1로 변환하려고 시도하는 값이 있습니까? 그렇지 않다면, boolean으로 캐스팅 한 결과가 어떻게 되겠습니까? –
astype에 대한 문서의 참고 사항 : "NumPy 1.9부터 astype 메소드는 캐스팅 할 문자열 dtype이 integer/float 배열의 최대 값을 보유하기위한 '안전한'캐스팅 모드에서 충분히 길지 않은 경우 오류를 반환합니다. 캐스팅되고있다. " 그건 분명 나에게 분명하다. bool은 int64의 최대 값은 말할 것도없고 1보다 큰 값을 적절하게 유지할 수 없다. – Evert
부울 값으로 1 또는 0을 의미한다고 가정 해 봅시다. 그렇게하지 않으면 동작을 어떻게할까요? –