Есть ли у NumPy select_dtypes, такие как Pandas? - PullRequest
0 голосов
/ 27 февраля 2019

Цель: использовать NumPy аналогично Pandas с «select_dtypes».

Настройка фрейма данных, подобного следующему:

>>> df = pd.DataFrame({'a': [1, 2] * 3,
...                    'b': [True, False] * 3,
...                    'c': [1.0, 2.0] * 3})
>>> df
        a      b  c
0       1   True  1.0
1       2  False  2.0
2       1   True  1.0
3       2  False  2.0
4       1   True  1.0
5       2  False  2.0

Яищите что-то вроде этого, но с NumPy:

>>> df.select_dtypes(include=['float64'])
   c
0  1.0
1  2.0
2  1.0
3  2.0
4  1.0
5  2.0

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 февраля 2019

Массивы Numpy имеют элементы, которые имеют одинаковый базовый тип.По сути, это C язык массивы (и их тип данных должен быть одинаковым для всех элементов).

Вы можете проверить это, используя атрибут .dtype, например:

import numpy as np

a = np.array([1.5, 2, 3])
print(a.dtype)

даст вам np.float64, даже если два элемента вставлены как int s

Если вы хотите проверить, может ли определенный float быть int (например, 2 и3 в приведенном выше примере), вы не должны этого делать, поскольку точность с плавающей запятой может быть проблемой.

Если вы действительно настаиваете, вы можете использовать np.isclose, чтобы получить логический массив, указывающий, является ли каждый float элемент находится достаточно близко к его полу int аналог, и это может быть castable без слишком большой потери в точности:

# For example above, e.g. [1.5, 2, 3]    
print(np.isclose(np.floor(a), a))

даст вам [False, True, True], что означает второе и третьеэлемент мог быть брошен.Еще раз, я советую вам не делать этого.

РЕДАКТИРОВАТЬ: Если у вас есть логический массив Numpy, приведенный к np.float, нет способа вернуть его обратно, так как вы не можете различитьbool приведено к float и int приведено к float с , если int имеет значение 0 или 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...