Python 从序列数据中筛选整数

Python 从序列数据中筛选整数,python,pandas,numpy,Python,Pandas,Numpy,我有这样的数据系列: s = pd.Series(data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'test', 10.10, 98], index=range(2, 12, 1)) 从串联数据中过滤整数的最简单方法是什么? 我只需要在数据中保留整数 多谢各位 data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'sber', 10.10, 98] data = [float(v) for v

我有这样的数据系列:

s = pd.Series(data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'test', 10.10, 98], 
              index=range(2, 12, 1))
从串联数据中过滤整数的最简单方法是什么? 我只需要在数据中保留整数

多谢各位

data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'sber', 10.10, 98]

data = [float(v) for v in data if str(v).replace(".","").isdigit()]

print (data)

data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'sber', 10.10, 98]

data = [int(v) for v in data if str(v).isdigit()]

print (data)
输出:

[1.0, 2.0, 3.1, 5.0, 12.42, 10.1, 98.0]
[1, 2, 5, 98]

带上您最喜欢的

您可以指定一个简单的类型检查函数,并将其与
pd.Series.apply一起传递

s = pd.Series(data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'sber', 10.10, 98.0], 
              index=range(2, 12, 1))

# strictly integers in input
s[pd.to_numeric(s, errors="coerce", downcast="signed").fillna(0).astype(int).eq(s)]

# allow strings and floats etc that are equivalent to integers
s[pd.to_numeric(s, errors="coerce", downcast="signed").fillna(0).astype(int).eq(pd.to_numeric(s, errors="coerce"))]
s[s.apply(lambda x: type(x)==int)]

请注意,Rob Raymond的答案对大型对象的效果更好。

是否将
10.0
限定为整数(因为它是一个可以完美表示为整数的浮点),或者您是否严格希望根据系列中现有的
类型
值来执行此操作,
'1'
也是整数吗?根据初始任务定义,“1”和10.0不应被视为整数。只是打字检查。对不起,我先没提到。但如果能看到一个选项同时将“1”和10.0视为整数,那就太好了