如何测试pandas.Series是否仅包含某些类型(例如int)?

时间:2018-07-09 21:49:08

标签: python pandas

我想测试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 个答案:

答案 0 :(得分:2)

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

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

s = pd.Series([1,'5'])
s.apply(isinstance,args = [int])
>> 0    True
   1    False
   dtype: bool

s.apply(isinstance,args = [int]).all()
>> False

答案 1 :(得分:0)

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

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

我们需要提供要检查的类型的示例。这有点反常。我将使用方法Series.istype(int)返回True或False。不过,非常具体的isinstance(3, series.dtype.type)会返回False

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

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