在 Pandas 数据帧中存储 FFT 周期时的奇怪问题

Strange issue when storing FFT periods in Pandas dataframe

我正在尝试将 FFT 计算的结果存储在 Pandas 数据框中:

ft = pd.DataFrame(index=range(90))
ft['y'] = ft.index.map(lambda x: np.sin(2*x))
ft['spectrum']  = np.fft.fft(ft['y'])
ft['freq']      = np.fft.fftfreq(len(ft.index)).real
ft['T']         = ft['freq'].apply(lambda f: 1/f if f != 0 else 0)

在最后一行之前一切似乎都工作正常:应该存储句点的列 T 由于某种原因具有框架的所有列,即:

In [499]: ft.T[0]
Out[499]:
y                            0j
spectrum    (0.913756021471+0j)
freq                         0j
T                            0j
Name: 0, dtype: complex128

我不明白为什么会这样。当我只取 freq:

的实部时也会发生这种情况
ft['freq']  = np.fft.fftfreq(len(ft.index)).real

或者我尝试使用替代方法计算 T 值,例如:

ft.T = ft.index.map(lambda i: 1/ft.freq[i] if ft.freq[i] else np.inf)
ft.T = 1/ft.freq

所有其他列在我 运行 head()describe() 上看起来都很整洁,无论它们包含实数值还是复数值。 freq 列看起来像一个普通的一维系列,因为 np.fft.fftfreq() returns 一维复数数组,那么列 T 如此混乱的原因可能是什么?

我正在使用 Pandas v. 1.19.2 和 Numpy v. 1.12.0.

PandasDataFrame对象有a propertyT,就是用"to transpose index and columns"的DataFrame对象。如果您使用不同的列名而不是 T,一切都会按预期进行。