我试图将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。
答案 0 :(得分:1)
Pandas DataFrame
个对象a property名为T
,用于“转换DataFrame对象的索引和列”。如果您使用其他列名而不是T
,则一切都按预期工作。