为什么 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/