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

标签 python numpy pandas coercion

为什么 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')

我觉得这种行为很奇怪,想知道它是否是一个错误。我使用的是 Pandas 版本 0.17.1(更新的 PyPI 版本),我注意到最近解决了一些强制错误,请参阅 https://github.com/pydata/pandas/issues/11847 .我还没有用更新的 GitHub master 尝试这段代码。

这是错误还是我误解了 Pandas 中的某些“功能”?如果它是一项功能,那么我该如何绕过它?

(强制转换问题与我最近提出的一个关于 Pandas 作业性能的问题有关:Assignment of Pandas DataFrame with float32 and float64 slow)

最佳答案

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

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

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

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

关于python - 为什么 Pandas 将我的 numpy float32 强制转换为 float64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230388/

相关文章:

python - Matplotlib:WebAgg 后端不显示任何数字

python - 您最初选择机器学习算法/进行初始设置的经验法则是什么?

python - 如何在 numpy 中搜索满足条件的索引?

python - 加速二维数组上的 NumPy 循环 - 删除相似的行

python - 在 Pandas 列表中提取列表

python - 如何在忽略 NaN 的同时将 Pandas DataFrame 中的所有列转换为 'object'?

python - Scikit-learn:覆盖分类器中的类方法

python - Pandas 分发时间序列数据

python - 苹果操作系统 : Using python to capture screenshots of a specific window

python - 第三个变量的颜色扰乱了plotly.express 日期轴的顺序