代码之家  ›  专栏  ›  技术社区  ›  Soerendip

如何测试pandas.Series是否只包含特定类型(例如int)?

  •  2
  • Soerendip  · 技术社区  · 7 年前

    我想测试pandas.Series()是否只包含整数。下面这些都不起作用。我更喜欢使用 isinstance() .

    import pandas as pd
    import numpy
    print(isinstance(pd.Series([1, 2]).dtype, numpy.int64))
    print(isinstance(pd.Series([1, 2]).dtype.type, numpy.int64))
    print(pd.Series([1, 2]).dtype)
    print(isinstance(pd.Series([1, 2]).dtype.type, int64))
    # False
    # False
    # int64
    # NameError: name 'int64' is not defined
    

    我想这个问题一定已经解决了,尽管我在寻找时没有找到它。

    2 回复  |  直到 7 年前
        1
  •  3
  •   xyzjayne    7 年前

    如果你知道序列只有一种数据类型,你可以 print(s.dtype == 'int64')

    当它包含多个数据类型时,序列的数据类型将是“object”,在这种情况下,您可能需要检查每个元素是否都是int:

    s = pd.Series([1,'5'])
    s.apply(isinstance,args = [int])
    >> 0    True
       1    False
       dtype: bool
    
    s.apply(isinstance,args = [int]).all()
    >> False
    
        2
  •  1
  •   Soerendip    7 年前

    好的,series.dtype.type实际上返回 type ,不是实例。因此,上面的例子不起作用。要正常工作,我们需要提供一个实例和一个类型。我们可以利用 isinstance 当像这样切换参数时:

    series = pd.Series([1, 2])
    isinstance(np.int64(3), series.dtype.type)
    

    我们需要提供一个要检查的类型的示例。这有点违反直觉。我想要一个方法 Series.istype(int) 返回真或假。不过,它非常具体 isinstance(3, series.dtype.type) 会回来的 False .

    另一种选择是 kind ,尽管我不确定这是否是其背后的意图:

    series.dtype.kind == 'i' # for integer