Как вывести только целочисленные значения из 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