为什么Pandas将我的numpy float32强制转换为float64?

Fin*_*sen 6 python numpy coercion pandas

为什么Pandas在这段代码中将我的numpy float32强制转换为float64:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame([[1, 2, 'a'], [3, 4, 'b']], dtype=np.float32)
>>> A = df.ix[:, 0:1].values
>>> df.ix[:, 0:1] = A
>>> df[0].dtype
dtype('float64')
Run Code Online (Sandbox Code Playgroud)

这个行为对我来说似乎很奇怪,不知道它是不是一个bug.我在Pandas版本0.17.1(更新的PyPI版本)上,我注意到最近有一些强制错误,请参阅https://github.com/pydata/pandas/issues/11847.我没有尝试使用更新的GitHub主代码.

这是一个错误还是我误解了熊猫的某些"功能"?如果它是一个功能,那么我该如何解决它?

(胁迫问题涉及我最近询问的有关Pandas任务性能的问题:使用float32和float64慢速分配Pandas DataFrame)

Mar*_*gur 3

我认为值得将其作为 GitHub 问题发布。这种行为肯定是不一致的。

该代码根据 DataFrame 是否是混合类型(source)采用不同的分支。

  • 在混合类型的情况下,ndarray 被转换为 float64 数字的 Python 列表,然后转换回 float64 ndarray,忽略 DataFrame 的 dtypes 信息(函数 Maybe_convert_objects())。

  • 在非混合类型的情况下,DataFrame 内容几乎直接更新(source),并且 DataFrame 保留其 float32 dtypes。