2017-03-21 12 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 

つまり、なぜ私が把握することはできません。私はFREQの実部を取るときにも発生:

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

またはIのような別の方法、使用してTの値を計算しよう:私はhead()を実行したときに

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

他のすべての列がきちんと見えます実数値または複素数値を含むかどうかにかかわらず、describe()はその上にありません。 np.fft.fftfreq()は1Dの複素数の配列を返すので、freqの列は通常の1D系列のように見えます。なぜ列Tがうんざりするのでしょうか?

私はPandas v。1.19.2とNumpy v。1.12.0を使用しています。

答えて

1

パンダDataFrameオブジェクトは、と呼ばれるa propertyと呼ばれ、DataFrameオブジェクトの「インデックスと列を転置する」ために使用されます。 Tの代わりに別の列名を使用すると、すべて正常に動作します。

+1

私はそれが私の部分に何かばかげたであろうことを知っていた:)クイック応答ありがとう。 – mac13k

関連する問題