Как создать подмножество данных на основе типа данных при использовании NumPy? - PullRequest
0 голосов
/ 27 февраля 2019

Цель: создать подмножество исходных данных на основе dtype

Как использовать NumPy для создания подмножества столбцов на основе dtypes.Более конкретно, используя приведенный ниже пример, как я могу создать объект NumPy, который содержит только значения с плавающей точкой ('<f8') в новом наборе данных.

Example
--------
>>> df = pd.DataFrame({'A': [1, 2], 'B': [0.5, 0.75]},
...                   index=['a', 'b'])
>>> df
   A     B
a  1  0.50
b  2  0.75
>>> df.to_records()
rec.array([('a', 1, 0.5 ), ('b', 2, 0.75)],
          dtype=[('index', 'O'), ('A', '<i8'), ('B', '<f8')])

РЕДАКТИРОВАТЬ: Я надеялся, что яможет использовать что-то вроде следующего:

np.where(my_np_array.dtype==[('int64')])

, что даст мне все столбцы с '<i8' и исключит все столбцы '<f8' в приведенном выше примере.

1 Ответ

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

Я не пробовал делать такой выбор раньше, но давайте посмотрим на составной dtype.

In [21]: M                                                                      
Out[21]: 
rec.array([('a', 1, 0.5 ), ('b', 2, 0.75)],
          dtype=[('index', 'O'), ('A', '<i8'), ('B', '<f8')])
In [22]: M.dtype.fields                                                         
Out[22]: 
mappingproxy({'index': (dtype('O'), 0),
              'A': (dtype('int64'), 8),
              'B': (dtype('float64'), 16)})

Я могу получить список имен полей с этим пониманием:

In [23]: [f[0] for f in M.dtype.fields.items() if f[1][0]==np.int64]            
Out[23]: ['A']
In [24]: M[_]                                                                   
Out[24]: 
rec.array([(1,), (2,)],
          dtype={'names':['A'], 'formats':['<i8'], 'offsets':[8], 'itemsize':24})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...