这是包含3个cols和3行
的数据集名称组织部门
Manie ABC2 FINANCE
Joyce ABC1 HR
Ami NSV2 HR
这是我的代码:
现在好了,直到这里,我如何删除每个的第一个虚拟变量列?
static List<Pair> solve(List<Pair> lunchMenuPairs, List<Pair> teamCuisinePreferencePairs){
List<Pair> result= new ArrayList<>();
...
答案 0 :(得分:7)
import pandas as pd
df = pd.DataFrame({'name': ['Manie', 'Joyce', 'Ami'],
'Org': ['ABC2', 'ABC1', 'NSV2'],
'Dept': ['Finance', 'HR', 'HR']
})
df_2 = pd.get_dummies(df,drop_first=True)
试验:
print(df_2)
Dept_HR Org_ABC2 Org_NSV2 name_Joyce name_Manie
0 0 1 0 0 1
1 1 0 0 1 0
2 1 0 1 0 0
使用pd.get_dummies(X, columns =[1:]
更新您的错误:
根据documentation page,columns
参数采用&#34;列名称&#34;。所以下面的代码可以工作:
df_2 = pd.get_dummies(df, columns=['Org', 'Dept'], drop_first=True)
输出:
name Org_ABC2 Org_NSV2 Dept_HR
0 Manie 1 0 0
1 Joyce 0 0 1
2 Ami 0 1 1
如果你真的想要定位你的列,你可以这样做:
column_names_for_onehot = df.columns[1:]
df_2 = pd.get_dummies(df, columns=column_names_for_onehot, drop_first=True)
答案 1 :(得分:1)
我使用自己的模板来做到这一点:
kh3m@kh3m-machine:~/Research/JavaScriptCore/WebKit$
>
sudo ./Tools/Scripts/build-webkit --jsc-only --debug
[sudo] password for kh3m:
+ cmake -DPORT="JSCOnly" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_BUILD_TYPE=Debug -DENABLE_SANITIZERS=address -G Ninja -DDEVELOPER_MODE=ON -DENABLE_EXPERIMENTAL_FEATURES=ON "/home/kh3m/Research/JavaScriptCore/WebKit"
要使用此代码,只需将此模板和文件名放在当前目录中,让我们假设CustomeEncoder.py并输入您的代码:
from sklearn.base import TransformerMixin
import pandas as pd
import numpy as np
class DataFrameEncoder(TransformerMixin):
def __init__(self):
"""Encode the data.
Columns of data type object are appended in the list. After
appending Each Column of type object are taken dummies and
successively removed and two Dataframes are concated again.
"""
def fit(self, X, y=None):
self.object_col = []
for col in X.columns:
if(X[col].dtype == np.dtype('O')):
self.object_col.append(col)
return self
def transform(self, X, y=None):
dummy_df = pd.get_dummies(X[self.object_col],drop_first=True)
X = X.drop(X[self.object_col],axis=1)
X = pd.concat([dummy_df,X],axis=1)
return X
然后将所有对象类型数据删除,编码,先删除并合并在一起,以提供最终所需的输出。
PS:该模板的输入文件是Pandas Dataframe。
答案 2 :(得分:1)
在scikit-learn版本中,从0.21开始非常简单。可以使用OneHotEncoder中的drop参数,并使用它为每个功能删除一个类别。默认情况下,它不会删除。详细信息可以在文档中找到。
$ cat replace.sh
#!/bin/bash
for i in `egrep -o \'[0-9]+\' a.txt`;do
sed -i "s/$i/${i:1:${#i}-2}/g" a.txt
done;
答案 3 :(得分:0)
一次编码一个分类变量。虚拟变量应该转到数据集的起始索引。然后,就像这样切断第一列:
X = X[:, 1:]
然后编码并重复下一个变量。
答案 4 :(得分:0)
使用ColumnTransformer可以仅将OneHotEncoder应用于某些列。 为分类和数字变量创建一个单独的管道,并应用ColumnTransformer。可以在ColumnTransformer上找到有关它的更多信息。
here提供了另一个很好的实现示例。
答案 5 :(得分:0)
我使用自己的模块来处理一种热编码。
false
使用非常简单
const empty = Object.keys(theObject).length === 0 || Object.values(theObject).filter(value => {
return value.trim() === '';
}).length > 0;
它返回带有列名的数据框。因此,涵盖了OneHotEncoder和pd.get_dummies()的缺点。 因此,我们可以像OneHotEncoder一样使用它进行拟合和转换,它还可以为我们保存列名并返回类似傻瓜方法的数据帧。
答案 6 :(得分:-2)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
for i in range(Y.shape[1]):
Y[:,i] = le.fit_transform(Y[:,i])