2017-03-21 38 views
1

我試圖存儲FFT計算的熊貓數據幀的結果:存儲在熊貓數據幀FFT週期時奇怪的問題

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 

我不明白爲什麼是這樣的。它發生同樣,當我只需要頻率的實部:

ft['freq'] = np.fft.fftfreq(len(ft.index)).real 

或我嘗試計算牛逼值使用替代方法,如:

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()無論它們是否包含真實或複雜的值。頻率列看起來像一個普通的1D系列,因爲np.fft.fftfreq()返回一維數組的複數,所以可能是列T被搞亂的原因是什麼?

我使用熊貓訴1.19.2和Numpy訴1.12.0。

回答

1

熊貓人DataFrame對象有a property被稱爲T,它用於「轉置DataFrame對象的索引和列」。如果您使用不同的列名稱而不是T,則一切都按預期工作。

+1

我知道這一定是愚蠢的我的一部分:)感謝您的快速反應。 – mac13k