Python & Pandas - pd.Series int32 和 int64 之间的区别

标签 python pandas numpy data-analysis

我开始学习 python、numpy 和 panda,我有一个非常基本的问题,关于大小。

请看下一个代码块:

<强>1。长度:6,数据类型:int64

# create a Series from a dict
pd.Series({key: value for key, value in zip('abcdef', range(6))})

对比

<强>2。长度:6,数据类型:int32

# but why does this generate a smaller integer size???
pd.Series(range(6), index=list('abcdef'))

问题 所以我认为当你在 pd.Series 中放入一个列表、numpy 数组、字典等时,你将得到 int64,但是当你只将 range(6) 放入 pd.Series 中时,你将得到 int32。有人可以向我解释一下吗?

很抱歉这个非常基本的问题。

@Edit:我使用的是 Pandas 版本 0.20.1 和 Numpy 1.12.1

最佳答案

它们在语义上的不同在于,在第一个版本中,您传递一个带有单个标量值的字典,因此 dtype 变为 int64,在第二个版本中,您传递一个 range 可以简单地转换为 numpy 数组,这是 int32:

In[57]:
np.array(range(6)).dtype

Out[57]: dtype('int32')

因此,pandas series 的构造在第一个实例中涉及 dtype 匹配,在第二个实例中不涉及 dtype,因为它可以转换为 numpy 数组,并且 numpy 已确定 int32在这种情况下是首选

更新

看起来这取决于您的 numpy 版本,也许还有 pandas 版本。 我正在运行 python 3.6、numpy 1.12.1 和 pandas 0.20.3,我得到了上述结果。我也在运行 Windows 7 64 位

@jeremycg 正在运行 pandas 0.19.2numpy 1.11.2,并且在 @coldspeed 正在运行 numpy 1.13 时观察到相同的结果。 1 并观察 int64

由此得出的结论是,dtype 将在很大程度上取决于 numpy 的作用。

我相信这 line在这种情况下,当我们通过 range 时调用的是什么。

subarr = np.array(arr, dtype=object, copy=copy)

返回的类型由 numpy 和操作系统确定,在我的例子中,windows 将 C Long 定义为 32 位。参见相关:numpy array dtype is coming as int32 by default in a windows 10 64 bit machine

关于Python & Pandas - pd.Series int32 和 int64 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240339/

相关文章:

javascript - 仅使用 getBoundingClientRect 查找 svg 特定区域中的元素

python - 在 matplotlib 中设置分组条形图之间的间距

python - 如何在groupby之后绘制数据

python - 将数组列表转换为列表列表?

python - Cython Gibbs 采样器比 numpy 采样器稍慢

python - Python中的正斜杠replace()

python - 并非所有参数都在字符串格式化期间转换

python 2.7 信号值错误

pandas - 工作日和一天中不同时间的平均参与度热图

python - pd DataFrame 中列的列名称