如果数组只包含数值类型,如何检测?

2024-05-29 10:18:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为机器学习编写一个数据预处理器,它需要将布尔数据视为类别,而不是试图将1视为大于0。在导入带有Pandas DataFrame的csv表之后,我想确定哪些列是boolean并将它们转换为boolean类型,而不需要迭代所有的数值列。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')

Cannot cast array from dtype('int64') to dtype('bool') according to the rule >'safe'

如果我删除“safe”转换,那么它就可以工作了,但是我需要“safe”,因为也有非布尔列,否则astype会在丢失数据的情况下变成布尔值。在

如果您能指出我的错误或建议其他方法,将只有布尔值的数值列/数组转换为布尔类型,我将不胜感激。在


Tags: 数据方法numpy类型dataframepandasdfarray
1条回答
网友
1楼 · 发布于 2024-05-29 10:18:21

现在我写了一个迭代来解决这个问题:

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() )

但我相信不应该每次都有人需要布尔值作为自己的数据类型。在

相关问题 更多 >

    热门问题