Как вывести только целочисленные значения из Pandas Series со смешанными типами данных?

Как из следующего массива вывести только целочисленные значения?

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

Ответы (4 шт):

Автор решения: CrazyElf

Наверняка есть способ проще, но я не придумал:

import pandas as pd

def getint(d):
    for x in d:
        try:
            if int(x) == float(x):
                yield int(x)
        except:
            continue

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

print(list(getint(d)))

Результат:

[1, 2, 5, -512, 98]

Хотя нет, нашёл способ проще, если элемент '1' считать строкой, а не целым:

print([x for x in d if type(x) == int])

Вывод:

[2, 5, -512, 98]
→ Ссылка
Автор решения: MaxU
In [5]: d[d.map(type).eq(int)]
Out[5]:
3        2
6        5
7     -512
11      98
dtype: object

или

In [7]: d[d.map(lambda x: isinstance(x, int))]
Out[7]:
3        2
6        5
7     -512
11      98
dtype: object
→ Ссылка
Автор решения: Евгений
import pandas as pd
d = pd.Series(data=['1', 2, 3.1, 'hi!', 5, -512, 12.42, 'sber', 10.10, 98], index=range(2, 12))

ints = [elem for elem in d if type(elem) == int]
print(ints)

Результат

[2, 5, -512, 98]
→ Ссылка
Автор решения: passant

Еще один вариант в одну строчку и оставлением элементов в исходной серии:

d=pd.Series([i for i in d if isinstance(i, int)])

Вывод: d

Out[11]: 
0      2
1      5
2   -512
3     98
dtype: int64
→ Ссылка