Почему isinstance () возвращает разные значения для одних и тех же данных в зависимости от реализации? - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть pandas dataframe 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 полностью ложный, что противоречит, если я запускаю отдельные значения через isScalar()

print(type(df.a1[1]))
>>> numpy.int64
print(isScalar(df.a1[1]))
>>> True

Что здесь происходит?Значения a1, возвращаемые df.applymap(isScalar), должны иметь значение True.

...