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

时间:2017-03-21 09:44:39

标签: python pandas numpy fft

我试图将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列看起来像普通的1D系列,因为np.fft.fftfreq()返回一维复数数组,那么为什么T列混乱的原因可能是什么呢?

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

1 个答案:

答案 0 :(得分:1)

Pandas DataFrame个对象a property名为T,用于“转换DataFrame对象的索引和列”。如果您使用其他列名而不是T,则一切都按预期工作。