scipy 快速傅立叶变换键错误:“对齐”?

oogrdqng  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(190)

我正在尝试对Pandas Dataframe 进行快速傅立叶变换,我使用的是Kepler系外行星数据集here和一个专用笔记本here,我在单元格27-30中重新创建了代码(注意,单元格29中的代码是在其他地方执行的,因此两个 Dataframe 的形状与原始笔记本相同),如下所示:

import scipy

def spectrum_getter(X):
    Spectrum = scipy.fft.fft(X, n=X.size)
    return np.abs(Spectrum)

x_train_OS_FT = x_train_OS.apply(spectrum_getter, axis=1)
x_test_FT = x_test.apply(spectrum_getter, axis=1)

x_train_OS和x_test都是pandas.core.frame.DataFrame。运行此命令将生成:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Input In [245], in <module>
----> 1 x_train_OS_FT = x_train_OS.apply(spectrum_getter, axis=1)
      2 x_test_FT = x_test.apply(spectrum_getter, axis=1)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\pandas\core\frame.py:8827, in DataFrame.apply(self, func, axis, raw, result_type, args,**kwargs)
   8816 from pandas.core.apply import frame_apply
   8818 op = frame_apply(
   8819     self,
   8820     func=func,
   (...)
   8825     kwargs=kwargs,
   8826 )
-> 8827 return op.apply().__finalize__(self, method="apply")

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\pandas\core\apply.py:727, in FrameApply.apply(self)
    724 elif self.raw:
    725     return self.apply_raw()
--> 727 return self.apply_standard()

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\pandas\core\apply.py:851, in FrameApply.apply_standard(self)
    850 def apply_standard(self):
--> 851     results, res_index = self.apply_series_generator()
    853     # wrap results
    854     return self.wrap_results(results, res_index)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\pandas\core\apply.py:867, in FrameApply.apply_series_generator(self)
    864 with option_context("mode.chained_assignment", None):
    865     for i, v in enumerate(series_gen):
    866         # ignore SettingWithCopy here in case the user mutates
--> 867         results[i] = self.f(v)
    868         if isinstance(results[i], ABCSeries):
    869             # If we have a view on v, we need to make a copy because
    870             #  series_generator will swap out the underlying data
    871             results[i] = results[i].copy(deep=False)

Input In [244], in spectrum_getter(X)
      3 def spectrum_getter(X):
----> 4     Spectrum = scipy.fft.fft(X, n=X.size)
      5     return np.abs(Spectrum)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\scipy\fft\_backend.py:22, in _ScipyBackend.__ua_function__(method, args, kwargs)
     20 if fn is None:
     21     return NotImplemented
---> 22 return fn(*args,**kwargs)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\scipy\fft\_pocketfft\basic.py:17, in c2c(forward, x, n, axis, norm, overwrite_x, workers, plan)
     14 if plan is not None:
     15     raise NotImplementedError('Passing a precomputed plan is not yet '
     16                               'supported by scipy.fft functions')
---> 17 tmp = _asfarray(x)
     18 overwrite_x = overwrite_x or _datacopied(tmp, x)
     19 norm = _normalization(norm, forward)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\scipy\fft\_pocketfft\helper.py:97, in _asfarray(x)
     95 dtype = x.dtype.newbyteorder('=')
     96 # Always align input
---> 97 copy = not x.flags['ALIGNED']
     98 return np.array(x, dtype=dtype, copy=copy)

File c:\users\marti\appdata\local\programs\python\python39\lib\site-packages\pandas\core\flags.py:98, in Flags.__getitem__(self, key)
     96 def __getitem__(self, key):
     97     if key not in self._keys:
---> 98         raise KeyError(key)
    100     return getattr(self, key)

KeyError: 'ALIGNED'

我试图将 Dataframe 转换为numpy数组,但遇到了其他问题。我在这里做错了什么?

j0pj023g

j0pj023g1#

我遇到了同样的错误,所以我将我的数据类型转换为 Dataframe ,它解决了我的问题。

相关问题