使用 Scikit-learn 和 Pandas 将编码列连接到原始数据框
Concatenate encoded columns to original data frame using Scikit-learn and Pandas
我正在尝试使用 Python 的 Scikit-learn 将 .csv
文件中的所有文本数据编码为数字。我在数据类型为 object
的列上使用 LabelEncoder
和 OneHotEncoder
。我想知道如何将新的编码列与原始数据帧连接起来 - 在这种情况下为 df
。我对此很陌生,非常感谢您的帮助。这是我的代码:
"""Encode all columns with type Object using LabelEncoder"""
columnsToEncode=df.select_dtypes(include=[object])
labelEncoder = preprocessing.LabelEncoder()
df_2 = columnsToEncode.apply(labelEncoder.fit_transform)
"""Now encode using OneHotEncoder"""
oneHotEncoder = preprocessing.OneHotEncoder()
df_3=oneHotEncoder.fit_transform(df_2)
有几种方法可以做到这一点。假设您想要对自变量进行编码,您可以使用 pd.get_dummies 并包含 drop_first=True 。这是一个例子:
import pandas as pd
# Create a data of independent variables X for the example
X = pd.DataFrame({'Country':['China', 'India', 'USA', 'Indonesia', 'Brasil'],
'Continent': ['Asia', 'Asia', 'North America', 'Asia', 'South America'],
'Population, M': [1403.5, 1324.2, 322.2, 261.1, 207.6]})
print(X)
# Encode
columnsToEncode=X.select_dtypes(include=[object]).columns
X = pd.get_dummies(X, columns=columnsToEncode, drop_first=True)
print(X)
# X prior to encoding
Continent Country Population, M
0 Asia China 1403.5
1 Asia India 1324.2
2 North America USA 322.2
3 Asia Indonesia 261.1
4 South America Brasil 207.6
# X after encoding
Population, M Continent_North America Continent_South America \
0 1403.5 0 0
1 1324.2 0 0
2 322.2 1 0
3 261.1 0 0
4 207.6 0 1
Country_China Country_India Country_Indonesia Country_USA
0 1 0 0 0
1 0 1 0 0
2 0 0 0 1
3 0 0 1 0
4 0 0 0 0
如果我在这里的理解正确,您希望对列进行编码并将它们恢复为数据帧格式。
一种方法可以是:
将你的 df 转换成矩阵。
df_array = df.as_matrix(columns=['A','B','C'])
执行编码:
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
for i in range(len(df.columns)):
df_array[:,i] = le.fit_transform(df_array[:,i])
对于 OneHotEncoder:
enc = OneHotEncoder()
enc.fit(df_array)
OHE_array=enc.transform(df_array).toarray()
但是,这个OHE可以大大增加维度。
因此,您可能需要执行 PCA 或某种降维技术来应用计算上可行的算法。
如果您希望它以数据帧格式返回:
newdf=pd.DataFrame(df_array, columns=['A','B','C'])
我正在尝试使用 Python 的 Scikit-learn 将 .csv
文件中的所有文本数据编码为数字。我在数据类型为 object
的列上使用 LabelEncoder
和 OneHotEncoder
。我想知道如何将新的编码列与原始数据帧连接起来 - 在这种情况下为 df
。我对此很陌生,非常感谢您的帮助。这是我的代码:
"""Encode all columns with type Object using LabelEncoder"""
columnsToEncode=df.select_dtypes(include=[object])
labelEncoder = preprocessing.LabelEncoder()
df_2 = columnsToEncode.apply(labelEncoder.fit_transform)
"""Now encode using OneHotEncoder"""
oneHotEncoder = preprocessing.OneHotEncoder()
df_3=oneHotEncoder.fit_transform(df_2)
有几种方法可以做到这一点。假设您想要对自变量进行编码,您可以使用 pd.get_dummies 并包含 drop_first=True 。这是一个例子:
import pandas as pd
# Create a data of independent variables X for the example
X = pd.DataFrame({'Country':['China', 'India', 'USA', 'Indonesia', 'Brasil'],
'Continent': ['Asia', 'Asia', 'North America', 'Asia', 'South America'],
'Population, M': [1403.5, 1324.2, 322.2, 261.1, 207.6]})
print(X)
# Encode
columnsToEncode=X.select_dtypes(include=[object]).columns
X = pd.get_dummies(X, columns=columnsToEncode, drop_first=True)
print(X)
# X prior to encoding
Continent Country Population, M
0 Asia China 1403.5
1 Asia India 1324.2
2 North America USA 322.2
3 Asia Indonesia 261.1
4 South America Brasil 207.6
# X after encoding
Population, M Continent_North America Continent_South America \
0 1403.5 0 0
1 1324.2 0 0
2 322.2 1 0
3 261.1 0 0
4 207.6 0 1
Country_China Country_India Country_Indonesia Country_USA
0 1 0 0 0
1 0 1 0 0
2 0 0 0 1
3 0 0 1 0
4 0 0 0 0
如果我在这里的理解正确,您希望对列进行编码并将它们恢复为数据帧格式。 一种方法可以是:
将你的 df 转换成矩阵。
df_array = df.as_matrix(columns=['A','B','C'])
执行编码:
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
for i in range(len(df.columns)):
df_array[:,i] = le.fit_transform(df_array[:,i])
对于 OneHotEncoder:
enc = OneHotEncoder()
enc.fit(df_array)
OHE_array=enc.transform(df_array).toarray()
但是,这个OHE可以大大增加维度。 因此,您可能需要执行 PCA 或某种降维技术来应用计算上可行的算法。
如果您希望它以数据帧格式返回:
newdf=pd.DataFrame(df_array, columns=['A','B','C'])