【问题标题】:Python & Pandas - pd.Series difference between int32 and int64Python & Pandas - pd.Series int32 和 int64 之间的区别
【发布时间】:2018-02-24 16:35:37
【问题描述】:

我开始学习 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,但是当你只在 pd.Series 中放置 range(6) 时,你会得到 int32。有人能帮我解释一下吗?

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

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

【问题讨论】:

  • 你的 python、numpy 和 OS 版本是什么?

标签: python pandas numpy data-analysis


【解决方案1】:

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

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

Out[57]: dtype('int32')

因此,pandas series 的构造在第一个实例中涉及 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

【讨论】:

  • 这可能是原因。我的 numpy 是 1.13.1,我也得到了 Bharath 的结果。
  • @ayhan,我相信 pandas 会尝试在传入的数据上调用 np.array ctor,如果它是可迭代的或类似数组的,那么 dtype 将来自 numpy。在第一种情况下,默认为 int64 以这种形式传递的标量类型
  • @ayhan 我认为这行:github.com/pandas-dev/pandas/blob/… 在这种情况下最终被称为
  • @ayhan 我希望一旦我们有 numpy 数组并且 dtype 没有混合,dtype 将直接通过,我正在尝试搜索代码以找到任何明确但它似乎用数组创建了一个 Singleblockmanager,然后调用 NDFrame.__init__ 它只会创建一个 copy
猜你喜欢
  • 2021-08-18
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2023-04-08
  • 1970-01-01
  • 2021-10-04
相关资源
最近更新 更多