python - 如何将一个热编码的结果加入数据帧?
问题描述
我想在人口普查数据集中执行 one-hot 编码,网址为:
https://archive.ics.uci.edu/ml/datasets/census+income
我要执行的列在国家列中,所以我做了以下内容:
import pandas as pd
from sklearn import preprocessing
def abrirArchivo(fileR):
head=["gt lt 50","age","workclass","fnlwgt","edu","edu-num","mar-sta","occ","rela","race","sex","cap-gain","cap-loss","country","hpw"]
f=pd.read_csv(fileR,sep=',')
f.columns=head
ohe=oneHot(f)
print (ohe)
def oneHot(f):
f[["country"]]=pd.get_dummies(f[["country"]])
return f
但我收到一个错误,上面写着:
ValueError: Columns must be same length as key
当我进行序数编码时,我对以下代码没有任何问题:
pp=preprocessing.OrdinalEncoder()
f[["country"]]=pp.fit_transform(f[["country"]])
我想要的是将转换后的 ohe(虚拟变量)连接到我原来的熊猫数据框,以便将其用于分类模型。
有什么帮助吗?
解决方案
看看pd.get_dummies
返回的是什么。现在,尝试考虑是否可以将其放入单个列中!不可能吧?
让我来说明一下。假设你有一个 DataFrame
col1 col2
0 1 name1
1 2 name2
现在,pd.get_dummies(df['col2'])
返回:
name1 name2
0 0 1
1 1 0
这是一个有两列的 DataFrame ,每一列对应 column 中的每个不同值col2
。
如果你尝试做
df['col2'] = pd.get_dummies(df['col2'])
您基本上会尝试在单个列中安装包含两列的 DataFrame。不可能!这就是什么ValueError: Columns must be same length as key
意思
如果您想在 中获得这些结果df
,您可以使用merge
,concat
或join
. 许多不同的方式(SO中有很多关于此的问题)。一个例子是:
df = df.join(pd.get_dummies(df['col2'])).drop(columns='col2')
*注:drop
用于删除原始列。
get_dummies
还有一个columns
参数,可用于创建虚拟对象并一步删除原始列:
df = pd.get_dummies(df, columns=['col2'])
请注意,旧列名变为新列,由下划线 ( )prefix
分隔:prefix_sep
_
col1 col2_name1 col2_name2
0 1 1 0
1 2 0 1
推荐阅读
- c++ - 我将如何更改vscode中cpp编译器的版本
- mqtt - Thingsboard 性能测试 - 加特林
- hadoop - hdfs put 失败从笔记本电脑到远程 hadoop 集群
- c# - 统一读取场景之间可变变量值的最佳方法是什么
- c++ - Emscripten:创建包装器以允许子类时出现“分配抽象类类型的对象”错误
- javascript - javascript在textarea和div中同时选择并突出显示2个块中的文本
- javascript - 如何过滤和解析 txt 文件中的数据 - javascript
- python - 无法通过 xpath 单击此按钮
- javascript - 如何使 div 打开/关闭缓慢?
- php - Laravel 6 和 PHP 7.4.24 中 Reportico 6.03 模块的 ADODB 5.21.0 错误