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