目标:基于dtype生成原始数据的子集
如何使用NumPy基于dtypes创建列的子集。更具体地说,使用下面的示例,如何创建一个仅在新数据集中包含浮点值('<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'
列。
答案 0 :(得分:1)
我以前没有尝试过这种选择,但是让我们看一下复合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})