我正在编写一个用于机器学习的数据预处理器,它需要将布尔数据视为类别,而不是尝试将1视为大于0.使用Pandas DataFrame导入csv表后我想确定哪些列是布尔值并将它们转换为布尔类型,而不迭代所有数字列来执行此操作。 Pandas故意将布尔列解释为'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')
根据规则>'safe'
,无法将数组从dtype('int64')转换为dtype('bool')
如果我删除'安全'转换,那么它可以正常工作,但我需要'安全',因为还有非布尔列,否则astype会变成带有数据丢失的布尔值。
如果您可以指出我的错误或建议其他方法将仅使用布尔值的数字列/数组转换为布尔类型,那么很有必要。
答案 0 :(得分:0)
现在我写了一个迭代来解决问题:
import pandas as pd
table = pd.DataFrame( {'A':[1, 0, 1],
'B':[1, 2, 3],
'C':[True, True, False],
'D':['a', 'b', 'c']} )
for column in range( table.shape[1] ):
if table.iloc[:,column].isin( [0, 1] ).all():
table.iloc[:,column] = table.iloc[:,column].astype( bool )
print( table.info() )
但我相信,每当有人需要布尔值为他们自己的数据类型时,就不应该这样做。