【问题标题】:How to classify a frequency domain data in Python 3? (could not convert string to float)如何在 Python 3 中对频域数据进行分类? (无法将字符串转换为浮点数)
【发布时间】:2018-03-18 06:42:14
【问题描述】:

我已使用以下方法将 DataFrame 从时域转换为频域:

df = np.fft.fft(df)

现在我需要使用多种机器学习算法对数据进行分类,例如随机森林和高斯朴素贝叶斯。问题是我不断收到此错误:

无法将字符串转换为浮点数:'(2.9510193818016135-0.47803712350473193j)'

我尝试将字符串转换为 DataFrame 中的浮点数,但它仍然给我同样的错误。

如何解决这个问题才能得到我的分类结果?

【问题讨论】:

  • 这些是复数,你建议如何转换为浮点数?基本上,您需要将这些数字转换为极坐标或矩形格式并拆分它们
  • 怎么做?

标签: python-3.x pandas dataframe


【解决方案1】:

假设你的结果类似于下面的形式,你首先需要转换成一个真正的复杂类型:

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

【讨论】:

  • 为什么我得到'fft'和'complex'的KeyError?
  • 因为你的 df 是一个 numpy 数组,在我的例子中我有一个 pandas 数据框,所以你需要修改你的代码
  • 不,我什至使用熊猫数据框( df = pd.DataFrame(df) )来确保它是一个数据框
  • 那么你有那些专栏吗?我敲了一个说明性的例子,我不知道你真正的df是什么样的,例如df.columns.tolist()返回什么?
  • 那么你有那些专栏吗?我举了一个说明性的例子,我不知道你真正的df是什么样的,例如df.columns.tolist()返回什么?这里的重点是您使用您拥有的任何列名,或者您使用这些列名构造一个 df,这是您可以查找的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2016-05-29
  • 2015-01-18
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多