2017-10-06 18 views
0

我從時域轉換後的​​數據幀到頻域:如何在Python 3中對頻域數據進行分類?使用(無法將字符串轉換爲浮動)

df = np.fft.fft(df) 

現在我需要使用多種機器學習算法,如隨機森林和高斯的數據進行分類樸素貝葉斯。問題是我不斷收到此錯誤:

could not convert string to float: ' (2.9510193818016135-0.47803712350473193j) '

我試圖將字符串轉換在DataFrame到漂浮,但它仍然給了我同樣的錯誤。

我如何解決這個問題,以獲得我的分類結果?

+0

這些都是複數,你打算如何轉換浮動?基本上你需要將這些數字轉換爲極性或矩形格式並將它們分開 – EdChum

+0

如何做到這一點? – sara

回答

2

假設你的結果就像下面的表格,你首先需要轉換爲真正的複雜類型:

In[84]: 
# data setup 
df = pd.DataFrame({'fft':['(2.9510193818016135-0.47803712350473193j)']}) 
df 

Out[84]: 
             fft 
0 (2.9510193818016135-0.47803712350473193j) 

現在轉換爲complex類型:

In[85]: 

df['complex'] = df['fft'].apply(complex) 
df 

Out[85]: 
             fft       complex 
0 (2.9510193818016135-0.47803712350473193j) (2.9510193818-0.478037123505j) 

現在,您可以提取作爲極性使用applycmath.polar的座標:

In[86]: 
import cmath 
df['polar_x'],df['polar_y'] = df['complex'].apply(lambda x: cmath.polar(x)[0]), df['complex'].apply(lambda x: cmath.polar(x)[1]) 
df 

Out[86]: 
             fft       complex \ 
0 (2.9510193818016135-0.47803712350473193j) (2.9510193818-0.478037123505j) 

    polar_x polar_y 
0 2.989487 -0.160595 

現在dtypes是兼容的,因此您可以通過浮動列:

In[87]: 
df.dtypes 

Out[87]: 
fft   object 
complex complex128 
polar_x  float64 
polar_y  float64 
dtype: object 

您還可以使用cmath.rect如果需要

+0

爲什麼我得到'fft'和'複雜'的KeyError? – sara

+0

因爲你的df是一個numpy數組,所以我有一個熊貓數據框,所以你需要修改你的代碼 – EdChum

+0

不,它是熊貓dataframe我甚至使用(df = pd.DataFrame(df))來確保它是一個數據幀 – sara

相關問題