python - 使用 NumPy 时如何根据数据类型创建数据子集?

标签 python pandas numpy

目标:根据 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/

相关文章:

python pandas 计算数据框中日期范围的小时数

python - 如何用Python求解非线性三角方程组(MATLAB可以轻松求解)

python - 如何检测非方阵的所有行是否在python中正交

python - 无法通过 `tail -F` 从 `stdin` 读取

python - 评估 df 的每一行中的日期时间函数是否落在另一个 df 的日期时间范围内

python - 矩阵扫描中的三重 for 循环

Python程序无法导入点解析器

python - 使用 python 将新行添加到 csv 文件

Python: webbrowser.open ("") 打开文件资源管理器窗口

python - 将字典转换为具有指定列名的 DataFrame