假设我现在有一个像这样的数据集,我只想编码具有字符串值的特定列。像在下面提到的数组中一样,我只希望对a [0] [0],a [0] [1],a [0] [3]和a [0] [4]进行LabelEncode。
a = [[[安达曼和尼科巴群岛,尼古巴,2000年,哈里夫,阿雷卡努特,1254.0,2000.0]]
我尝试过的是:
dataset = pd.read_csv('crop_production.csv')
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
dataset = dataset.apply(le.fit_transform)
但是它甚至可以编码数值。
有什么想法只对特定的csv列进行编码吗?
数据集示例:
State_Name District_Name Crop_Year Season Crop Area Production
Andaman and Nicobar Islands NICOBARS 2000 Kharif Arecanut 1254.0 2000.0
答案 0 :(得分:0)
请考虑如下所示的示例数据框
sample = pd.DataFrame()
sample['A'] = ['a', 'b', 'c', 'a']
sample['B'] = ['x', 'y', 'x', 'z']
sample['C'] = [1, 2, 3, 4]
sample['D'] = ['m', 'n', 'm', 'o']
# sample dataframe
A B C D
0 a x 1 m
1 b y 2 n
2 c x 3 m
3 a z 4 o
A,B和D列包含字符串,C列为数字。因此,您想对A,B和D进行编码,而不对C进行编码。要做到这一点,可以使编码器特定于一列,并根据需要嵌入该列。为此,请参见下面的代码。
from sklearn.preprocessing import LabelEncoder
encoder_A = LabelEncoder()
encoder_B = LabelEncoder()
encoder_D = LabelEncoder()
sample['A'] = encoder_A.fit_transform(sample['A'])
sample['B'] = encoder_B.fit_transform(sample['B'])
sample['D'] = encoder_D.fit_transform(sample['D'])
# encoded dataframe
A B C D
0 0 0 1 0
1 1 1 2 1
2 2 0 3 0
3 0 2 4 2
您可以轻松地将此代码扩展到您的特定问题。
答案 1 :(得分:0)
您可以在不提供(或不知道)列名的情况下使用一种更通用的方法:
# seperate categoricals from numericals
df_numeric = dataset.select_dtypes(exclude=['object'])
df_obj = dataset.select_dtypes(include=['object']).copy()
# now factorize categoricals
for c in df_obj:
df_obj[c] = pd.factorize(df_obj[c])[0]
# merge back into one dataframe
df_final = pd.concat([df_numeric, df_obj], axis=1)
df_final.reset_index(inplace=True, drop=True)