【问题标题】:Pandas dataframe to numpy void arrayPandas 数据框到 numpy void 数组
【发布时间】:2020-12-15 14:54:25
【问题描述】:

我正在使用 FMPY 模块,它是模拟 FMU 的绝佳工具。

对于输入,模块需要一个信号数组,

dtype = [('time', np.double), ('step', np.double), ('pshaft', np.double), ('rpm', np.double)]
signals = np.array([(0.0, 1 ,20, 5000), 
                    (1., 1,25, 5000), 
                    (2., 1,30 , 5000), 
                    (3., 1,35, 5000)],
                    dtype=dtype)

我面临的挑战是从列名为“时间”、“步骤”等的数据框中创建这样一个数组... 我曾尝试使用df.to_record(index=false),但它提供了不同的 NumPy 对象类型。如果我查看 dtype 的两个不同对象,我会得到这个。

signals[0].dtype
Out[7]: dtype([('time', '<f8'), ('step', '<f8'), ('pshaft', '<f8'), ('rpm', '<f8')])

test[0].dtype
Out[8]: dtype((numpy.record, [('time', '<f8'), (' step', '<i8'), (' pshaft', '<i8'), (' rpm', '<i8')]))

问题是是否有办法从dtype 中删除numpy.record,看看是否能解决问题?

【问题讨论】:

    标签: arrays pandas numpy record void


    【解决方案1】:

    显然我看不到 csv 文件中有空格......所以这是一个简单的用户错误。

    【讨论】:

      【解决方案2】:

      to_record 生成 np.recarrayndarray 的子类。它就像一个结构化数组,但增加了将字段引用为属性的能力。我认为这是numpy 的早期功能,它在很大程度上已被结构化数组(以及复合dtype)所取代。所以pandas 的使用有点像过去的保留。

      In [190]: x = np.array([(1,2),(3,4)], 'i,i')
      In [191]: x
      Out[191]: array([(1, 2), (3, 4)], dtype=[('f0', '<i4'), ('f1', '<i4')])
      In [192]: x.dtype
      Out[192]: dtype([('f0', '<i4'), ('f1', '<i4')])
      

      您可以使用以下方法从结构化数组中创建一个重新数组:

      In [193]: y = x.view(np.recarray)
      In [194]: y
      Out[194]: 
      rec.array([(1, 2), (3, 4)],
                dtype=[('f0', '<i4'), ('f1', '<i4')])
      In [195]: y.dtype
      Out[195]: dtype((numpy.record, [('f0', '<i4'), ('f1', '<i4')]))
      In [196]: y.f0
      Out[196]: array([1, 3], dtype=int32)
      In [197]: y['f0']
      Out[197]: array([1, 3], dtype=int32)
      

      必须转换回ndarray,但我的狩猎和啄食实验没有找到它。我将不得不分解并阅读文档:)

      FMPY 模块是否因使用recarray 而烦恼?我认为这对大多数 numpy 代码没有影响。

      【讨论】:

        猜你喜欢
        • 2019-11-07
        • 1970-01-01
        • 1970-01-01
        • 2019-09-23
        • 2013-09-09
        • 2020-06-20
        • 1970-01-01
        • 2017-10-05
        相关资源
        最近更新 更多