对大量分类数据进行标签编码

发布于 2025-01-13 08:17:41 字数 646 浏览 0 评论 0原文

我有一个包含 39 个分类特征和 27 个数字特征的数据集。我正在尝试对分类数据进行编码,并且需要能够进行逆变换并再次为每列调用转换。有没有比定义 39 个单独的 LabelEncoder 实例,然后分别对每一列进行 fit_transform 更漂亮的方法?

我觉得我错过了一些明显的东西,但我无法弄清楚!

enc = LabelEncoder
cat_feat = [col for col in input_df2.columns if input_df2[col].dtype == 'object']
cat_feat = np.asarray(cat_feat)

le1 =LabelEncoder()
le2 =LabelEncoder()
le3 =LabelEncoder()
...
#extended to le39

def label(input):
       input.iloc[:, 1] = le1.fit_transform(input.iloc[:, 1])
       input.iloc[:, 3] = le1.fit_transform(input.iloc[:, 3])
       input.iloc[:, 4] = le1.fit_transform(input.iloc[:, 4])
       ... 
       return input

I have a dataset with 39 categorical and 27 numerical features. I am trying to encode the categorical data and need to be able to inverse transform and call transform for each column again. Is there a prettier way of doing it than defining 39 separate LabelEncoder instances, and then fit_transform to each column individually?

I feel like I am missing something obvious, but I cant figure it out!

enc = LabelEncoder
cat_feat = [col for col in input_df2.columns if input_df2[col].dtype == 'object']
cat_feat = np.asarray(cat_feat)

le1 =LabelEncoder()
le2 =LabelEncoder()
le3 =LabelEncoder()
...
#extended to le39

def label(input):
       input.iloc[:, 1] = le1.fit_transform(input.iloc[:, 1])
       input.iloc[:, 3] = le1.fit_transform(input.iloc[:, 3])
       input.iloc[:, 4] = le1.fit_transform(input.iloc[:, 4])
       ... 
       return input

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤蝉 2025-01-20 08:17:42

DataFrame.apply 就是为了这个。它将为数据帧的每一列(或每一行,如果您传递它axis=1)调用指定的函数:

encoders = []

def apply_label_encoder(col):
    le = LabelEncoder()
    encoders.append(le)
    le.fit_transform(col)
    return 

input_df.iloc[:, 1:] = input_df.iloc[:, 1:].apply(apply_label_encoder)

DataFrame.apply is just for this. It will call the specified function for each column of the dataframe (or each row, if you pass it axis=1):

encoders = []

def apply_label_encoder(col):
    le = LabelEncoder()
    encoders.append(le)
    le.fit_transform(col)
    return 

input_df.iloc[:, 1:] = input_df.iloc[:, 1:].apply(apply_label_encoder)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文