如何对列中的值进行单热编码,同时将某些值视为同一类别
how to one-hot-encode values in a columns,while treating some values as one same category
我想对 Pandas 数据框中的列进行单热编码。该列中的某些值出现率较低,因此我想将它们视为同一类别。是一种使用 one-hot-encoder 或 get_dummies 方法来做到这一点的方法吗?
我想出的一种方法是在编码之前用字典替换这些值。任何建议将不胜感激。
您可以使用:
df = pd.DataFrame({'A':[1,2,3,4,5,6,6,5,4]}).astype(str)
print (df)
A
0 1
1 2
2 3
3 4
4 5
5 6
6 6
7 5
8 4
首先使用 value_counts
and boolean indexing
and in dict comprehension
add same scalar value like 0
. Last replace
获取所有低于阈值的值:
tresh = 2
s = df['A'].value_counts()
d = {x:0 for x in s[s < tresh].index}
print (d)
{'1': 0, '3': 0, '2': 0}
df = df.replace(d)
print (df)
A
0 0
1 0
2 0
3 4
4 5
5 6
6 6
7 5
8 4
print (pd.get_dummies(df, prefix='', prefix_sep=''))
0 4 5 6
0 1 0 0 0
1 1 0 0 0
2 1 0 0 0
3 0 1 0 0
4 0 0 1 0
5 0 0 0 1
6 0 0 0 1
7 0 0 1 0
8 0 1 0 0
我想对 Pandas 数据框中的列进行单热编码。该列中的某些值出现率较低,因此我想将它们视为同一类别。是一种使用 one-hot-encoder 或 get_dummies 方法来做到这一点的方法吗? 我想出的一种方法是在编码之前用字典替换这些值。任何建议将不胜感激。
您可以使用:
df = pd.DataFrame({'A':[1,2,3,4,5,6,6,5,4]}).astype(str)
print (df)
A
0 1
1 2
2 3
3 4
4 5
5 6
6 6
7 5
8 4
首先使用 value_counts
and boolean indexing
and in dict comprehension
add same scalar value like 0
. Last replace
获取所有低于阈值的值:
tresh = 2
s = df['A'].value_counts()
d = {x:0 for x in s[s < tresh].index}
print (d)
{'1': 0, '3': 0, '2': 0}
df = df.replace(d)
print (df)
A
0 0
1 0
2 0
3 4
4 5
5 6
6 6
7 5
8 4
print (pd.get_dummies(df, prefix='', prefix_sep=''))
0 4 5 6
0 1 0 0 0
1 1 0 0 0
2 1 0 0 0
3 0 1 0 0
4 0 0 1 0
5 0 0 0 1
6 0 0 0 1
7 0 0 1 0
8 0 1 0 0