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