Python 如何使用Pandas或Numpy从值列表推断数据类型?

Python 如何使用Pandas或Numpy从值列表推断数据类型?,python,arrays,numpy,pandas,Python,Arrays,Numpy,Pandas,我有一个布尔值数组,它当前被归类为对象数组。如何让Pandas/Numpy重新运行类型推断引擎 0 True 1 False 2 True Name: b, dtype: object 我找到的唯一解决方案是显式地将其强制转换为Python数组,然后再转换回Pandas数组: ipdb> numpy.array(tmp) array([True, False, True], dtype=object) ipdb> numpy.array(list(tmp))

我有一个布尔值数组,它当前被归类为
对象数组
。如何让Pandas/Numpy重新运行类型推断引擎

0     True
1    False
2     True
Name: b, dtype: object
我找到的唯一解决方案是显式地将其强制转换为Python数组,然后再转换回Pandas数组:

ipdb> numpy.array(tmp)
array([True, False, True], dtype=object)
ipdb> numpy.array(list(tmp))
array([ True, False,  True], dtype=bool)
但这感觉非常不理想


关于为什么会发生这种情况的简要背景:

  • 正在从CSV文件(可能有数千个我无法控制的文件)加载数据
  • 其中很多都是质量很差的Excel生成的空行表
  • 使用
    read\u csv
    读取,并删除空行
  • 但是他们被错误的数据类型所困扰,因为最初该列包含空白字符串
  • 我希望对数据进行尽可能严格的绑定,因为它将提交给后续的解析引擎

因为即使在调用
dropna
之后,您最初也有一个混合的
dtype
,因此您可以强制该dtype,因为您感兴趣的是保留数字和布尔类型,然后调用或将正确转换
dtype

In [31]:
pd.Series([True,False,True,None]).dropna().convert_objects(convert_numeric=True)

Out[31]:
0     True
1    False
2     True
dtype: bool

In [30]:    
pd.to_numeric(pd.Series([True,False,True,None]).dropna())

Out[30]:
0     True
1    False
2     True
dtype: bool

object
在这里是正确的
dtype
:它们实际上是布尔值,因此您不必担心,我需要将它们提交到数据仓库并声明这是一个严格的布尔值列。因此,我确实需要比“object”更严格的界限——这必须是可能的,因为转换
pandas->python->pandas
会更改数据类型。我无法复制这一点,我得到
bool
作为
dtype
当所有元素都是布尔值时,您还可以强制强制转换
dtype
df['b'].astype(bool)
要复制,请执行:
pandas.Series([True,False,True,None]).dropna()