我有这些数据
我尝试应用以下代码:
one_hot = pd.get_dummies(df)
但我得到了这个错误:
这是我之前的代码:
# 导入模块import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn import treedf = pd.read_csv('AllMSAData.csv')df.head()corr_matrix = df.corr()corr_matrixdf.describe()# 获取特征和目标labels = np.array(df['CurAV'])# 从特征中移除标签# axis 1 指的是列df = df.drop('CurAV', axis = 1)# 保存特征名称以备后用feature_list = list(df.columns)# 转换为 numpy 数组df = np.array(df)
回答:
在我看来,文档应该更新,因为它说 pd.get_dummies
接受类似数组的数据,而一个二维的 numpy
数组确实是类似数组的(尽管没有类似数组的正式定义)。然而,它似乎不喜欢多维数组。
以这个小例子为例:
>>> df a b c0 a 1 d1 b 2 e2 c 3 f
你无法对底层的二维 numpy
数组进行虚拟编码:
>>> pd.get_dummies(df.values)
Exception: 数据必须是一维的
但是你可以对数据框本身进行虚拟编码:
>>> pd.get_dummies(df) b a_a a_b a_c c_d c_e c_f0 1 1 0 0 1 0 01 2 0 1 0 0 1 02 3 0 0 1 0 0 1
或者对单个列的底层一维数组进行虚拟编码:
>>> pd.get_dummies(df['a'].values) a b c0 1 0 01 0 1 02 0 0 1