目标:根据 dtype 生成原始数据的子集
如何使用 NumPy 基于数据类型创建列的子集。更具体地说,使用下面的示例,如何创建一个仅包含浮点值 ('<f8')
的 NumPy 对象在新的数据集中。
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'
上面示例中的列。
最佳答案
我以前没有尝试过进行这种选择,但让我们看看复合数据类型。
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})
关于python - 使用 NumPy 时如何根据数据类型创建数据子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54908242/