我开始学习 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.2
和 numpy
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/