Python 为什么isinstance()会根据实现为同一数据返回不同的值?

Python 为什么isinstance()会根据实现为同一数据返回不同的值?,python,pandas,boolean,isinstance,Python,Pandas,Boolean,Isinstance,我有一个熊猫数据框df,我想在这里检查数据类型 import pandas as pd import numpy as np df >>> a1 a2 a3 a4 0 5 10.08 22.9 50.45 1 25 13.80 43.0 NaN 2 2 8.30 15.0 17.00 print(df.dtypes) >>> a1 int64 a2 float64 a3

我有一个熊猫数据框
df
,我想在这里检查数据类型

import pandas as pd
import numpy as np

df
>>> a1    a2    a3    a4
0   5     10.08 22.9  50.45
1   25    13.80 43.0  NaN
2   2     8.30  15.0  17.00
print(df.dtypes)
>>>
a1        int64
a2     float64
a3     float64
a4     float64
dtype: object
我有一个检查数据类型的函数,即值是否是标量

def isScalar(a):
    if isinstance(a, (int, float, np.int64, np.float64)):
        return True
    else:
        return False
现在,如果我跑

df.applymap(isScalar)
>>> a1      a2      a3      a3      
0   False   True    True    True
1   False   True    True    True
2   False   True    True    True
我们看到
a1
列都是False,如果我通过
isScalar()


这是怎么回事?
df.applymap(isScalar)
返回的
a1
值应该都是真的。

我无法重现您的问题。我得到了所有的
True
值,结果证明这是python版本的问题。我有Python2.7和Python3.7环境,它们都有与numpy相同的pandas版本(分别为0.23.4和1.15.4)。在Python2.7中,我得到了问题中提出的错误。在Python3.7中,我没有。不过,知道为什么会发生这种情况还是很好的。即使在2.7上,我也无法复制:
print(type(df.a1[1]))
>>> numpy.int64
print(isScalar(df.a1[1]))
>>> True