如何操作这个小于/大于的列?

数据挖掘 数据集 特征选择 数据清理 特征提取 擅长
2022-02-13 15:17:14

我有一个数据集,其中一列如图所示。处理此类列的最佳方法是什么?

在此处输入图像描述

1个回答

这是一个分类变量。文献中有多种处理分类变量的方法 -

虚拟化(主要用于名义变量)

将变量拆分并转换为多个二进制变量(变量个数应为1-(number of classes))。

Python 示例 -

import pandas as pd
series = pd.Series(['<=50k', '<=50k', '<=50k', '<=50k', '<=50k', '<=50k', '<=50k', 
                    '>50k', '>50k', '>50k', '>50k', '>50k', '<=50k'])

print(pd.get_dummies(series).iloc[:, 1:])

输出

>50k
0      0
1      0
2      0
3      0
4      0
5      0
6      0
7      1
8      1
9      1
10     1
11     1
12     0

注意以前是字符串的信息现在是如何编码为数字的。删除一列的原因是不存在完美的多重共线性。

排名(在序数变量的情况下)

在这些情况下,您可以清楚地rank了解变量。在您的情况下,对它们进行排名会更有意义,因为我们知道那时>50k实际上超过<50k.

在你的薪水案例中使用排名方法和名义案例的虚拟化方法(如location变量 - 无法订购)

Python 示例 -

import pandas as pd
series = pd.Series(['<=50k', '<=50k', '<=50k', '<=50k', '<=50k', '<=50k', '<=50k', 
                    '>50k', '>50k', '>50k', '>50k', '>50k', '<=50k'])
uniq = series.unique()
ranks = { uniq[i]:i+1 for i in range(len(uniq)) }
print(ranks)
series_ranked = series.apply(lambda x: ranks[x])
print(series_ranked)

输出

0     1
1     1
2     1
3     1
4     1
5     1
6     1
7     2
8     2
9     2
10    2
11    2
12    1
dtype: int64

同样,这绝不是一个详尽的答案,但请放心,这些是用于处理分类变量的最流行的方法。希望有帮助。干杯!