【发布时间】:2015-11-23 20:10:34
【问题描述】:
我有一个布尔值数组,目前归类为object 数组。如何让 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_csv读取它们,并删除空白行。 - 但他们坚持使用错误的 dtype,因为最初该列包含空白字符串。
- 我希望对数据进行尽可能严格的限制,因为它正在提交给后续的解析引擎。
【问题讨论】:
-
object在这里是正确的dtype:docs.scipy.org/doc/numpy/reference/arrays.scalars.html 它们确实是布尔值,所以你不必担心 -
我需要将它们提交到数据仓库并声明这是一个严格的布尔列。所以我确实需要获得比“对象”更紧密的界限——这必须是可能的,因为转换
pandas -> python -> pandas会改变 dtype。 -
我无法重现这个,当所有元素都是布尔值时,我得到
bool作为dtype -
也可以强制投
dtypedf['b'].astype(bool) -
复制,执行:
pandas.Series([True,False,True,None]).dropna()
标签: python arrays numpy pandas