Python 3.x 如何在Python 3中对频域数据进行分类?(无法将字符串转换为浮点)
我已使用以下方法将数据帧从时域转换为频域:Python 3.x 如何在Python 3中对频域数据进行分类?(无法将字符串转换为浮点),python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我已使用以下方法将数据帧从时域转换为频域: df = np.fft.fft(df) 现在我需要使用一些机器学习算法对数据进行分类,比如随机森林和高斯朴素贝叶斯。问题是我不断地遇到这个错误: 无法将字符串转换为浮点:“(2.9510193818016135-0.47803712350473193j)” 我试图将字符串转换为DataFrame中的浮点数,但仍然出现相同的错误 如何解决此问题以获得分类结果?假设您的结果如下所示,您首先需要转换为真正的复杂类型: In[84]: # data setu
df = np.fft.fft(df)
现在我需要使用一些机器学习算法对数据进行分类,比如随机森林和高斯朴素贝叶斯。问题是我不断地遇到这个错误:
无法将字符串转换为浮点:“(2.9510193818016135-0.47803712350473193j)
”
我试图将字符串转换为DataFrame
中的浮点数,但仍然出现相同的错误
如何解决此问题以获得分类结果?假设您的结果如下所示,您首先需要转换为真正的复杂类型:
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)
现在,您可以使用apply
和cmath.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
现在,d类型
是兼容的,因此您可以传递浮点列:
In[87]:
df.dtypes
Out[87]:
fft object
complex complex128
polar_x float64
polar_y float64
dtype: object
如果需要,您也可以使用假设您的结果类似于以下表单,您首先需要转换为真正的复杂类型:
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)
现在,您可以使用apply
和cmath.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
现在,d类型
是兼容的,因此您可以传递浮点列:
In[87]:
df.dtypes
Out[87]:
fft object
complex complex128
polar_x float64
polar_y float64
dtype: object
如果需要,您也可以使用这些是复数,您建议如何转换为浮点数?基本上,你需要将这些数字转换成极坐标或矩形格式,然后拆分它们。怎么做?这些都是复数,你打算如何转换成浮点数?基本上,您需要将这些数字转换为极坐标或rect格式,并将其拆分如何实现?为什么我会得到'fft'和'complex'的KeyError?因为您的df是一个numpy数组,在我的示例中,我有一个熊猫数据帧,所以您需要修改您的代码不,我甚至使用了熊猫数据帧(df=pd.dataframe(df))为了确保它是一个DataFrame,那么您有这些列吗?我举了一个说明性的例子,我不知道实际的df是什么样子,例如
df.columns.tolist()
返回什么?那么你有那些列吗?我举了一个示例,我不知道实际的df是什么样子,例如df.columns.tolist()
返回什么?这里的要点是,你使用你拥有的任何列名,或者你用这些列名构造一个df,这是你可以向上看的东西为什么我得到'fft'和'complex'的KeyError?因为你的df是一个numpy数组,在我的示例中,我有一个熊猫数据帧,所以你需要修改你的代码不,我甚至使用了熊猫数据帧(df=pd.dataframe)(df))为了确保它是一个DataFrame,那么你有那些列吗?我举出了一个示例,我不知道你真正的df是什么样子,例如df.columns.tolist()是什么
return?你有那些列吗?我举了一个说明性的例子,我不知道你真正的df是什么样子,例如df.columns.tolist()
return?这里的要点是,你可以使用你拥有的任何列名,或者用这些列名构造一个df,这是你可以查找的