为什么循环不能在一种热编码中工作
why doesn't the looping works in onehot encoding
for i in data.columns:
top_10 = [x for x in data.i.value_counts().sort_values(ascending=False).head(10).index]
for label in top_10:
data[label] = np.where(data['i'] == label, 1, 0)
data[['i'] + top_10]
哪里出错了?
如果你想使用你在 for i in data.columns:
中的变量 i
那么你不应该使用 data.i
而应该使用 data[i]
(没有 ' '
)
for i in data.columns:
top_10 = data[i].value_counts().sort_values(ascending=False).head(10).index
如果您使用更好的名称,也许它会更具可读性。 column_name
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
data.i
与 data["i"]
类似,它表示名称为 i
的列,而不是变量 i
.
我不知道你想用嵌套的 for
循环做什么,但你也应该使用 data[i]
而不是 data["i"]
for label in top_10:
data[label] = np.where(data[i]==label, 1, 0)
但也许你应该使用更好的方法来创建标签
for number, value in enumerate(top_10):
data[i + '_' + str(number)] = np.where(data[i].index==value, 1, 0)
使用不同的名称可能更具可读性
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
for number, value in enumerate(top_10):
data[column_name + '_' + str(number)] = np.where(data[column_name].index==value, 1, 0)
但是没有一些示例数据很难说它是否正确。
编辑:
最简单的工作示例。
我使用 random.seed(0)
总是得到相同的值。
我使用 top_3
在屏幕上查看所有值。
import pandas as pd
import random
import numpy as np
random.seed(0) # to get the same values every time
data = pd.DataFrame({
"A": [random.randint(0, 10) for _ in range(10)],
"B": [random.randint(0, 10) for _ in range(10)],
})
#print(data)
for column_name in data.columns:
#print(data[column_name].value_counts())
top_3 = data[column_name].value_counts().sort_values(ascending=False).head(3).index
#print(top_3)
for number, value in enumerate(top_3, 1):
name = column_name + '_' + str(number)
data[name] = np.where(data[column_name]==value, 1, 0)
print(data)
结果:
A B A_1 A_2 A_3 B_1 B_2 B_3
0 6 9 1 0 0 0 0 0
1 6 3 1 0 0 0 0 0
2 0 8 0 0 0 0 0 1
3 4 2 0 1 0 1 0 0
4 8 4 0 0 0 0 1 0
5 7 2 0 0 1 1 0 0
6 6 1 1 0 0 0 0 0
7 4 9 0 1 0 0 0 0
8 7 4 0 0 1 0 1 0
9 5 8 0 0 0 0 0 1
for i in data.columns:
top_10 = [x for x in data.i.value_counts().sort_values(ascending=False).head(10).index]
for label in top_10:
data[label] = np.where(data['i'] == label, 1, 0)
data[['i'] + top_10]
哪里出错了?
如果你想使用你在 for i in data.columns:
中的变量 i
那么你不应该使用 data.i
而应该使用 data[i]
(没有 ' '
)
for i in data.columns:
top_10 = data[i].value_counts().sort_values(ascending=False).head(10).index
如果您使用更好的名称,也许它会更具可读性。 column_name
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
data.i
与 data["i"]
类似,它表示名称为 i
的列,而不是变量 i
.
我不知道你想用嵌套的 for
循环做什么,但你也应该使用 data[i]
而不是 data["i"]
for label in top_10:
data[label] = np.where(data[i]==label, 1, 0)
但也许你应该使用更好的方法来创建标签
for number, value in enumerate(top_10):
data[i + '_' + str(number)] = np.where(data[i].index==value, 1, 0)
使用不同的名称可能更具可读性
for column_name in data.columns:
top_10 = data[column_name].value_counts().sort_values(ascending=False).head(10).index
for number, value in enumerate(top_10):
data[column_name + '_' + str(number)] = np.where(data[column_name].index==value, 1, 0)
但是没有一些示例数据很难说它是否正确。
编辑:
最简单的工作示例。
我使用 random.seed(0)
总是得到相同的值。
我使用 top_3
在屏幕上查看所有值。
import pandas as pd
import random
import numpy as np
random.seed(0) # to get the same values every time
data = pd.DataFrame({
"A": [random.randint(0, 10) for _ in range(10)],
"B": [random.randint(0, 10) for _ in range(10)],
})
#print(data)
for column_name in data.columns:
#print(data[column_name].value_counts())
top_3 = data[column_name].value_counts().sort_values(ascending=False).head(3).index
#print(top_3)
for number, value in enumerate(top_3, 1):
name = column_name + '_' + str(number)
data[name] = np.where(data[column_name]==value, 1, 0)
print(data)
结果:
A B A_1 A_2 A_3 B_1 B_2 B_3
0 6 9 1 0 0 0 0 0
1 6 3 1 0 0 0 0 0
2 0 8 0 0 0 0 0 1
3 4 2 0 1 0 1 0 0
4 8 4 0 0 0 0 1 0
5 7 2 0 0 1 1 0 0
6 6 1 1 0 0 0 0 0
7 4 9 0 1 0 0 0 0
8 7 4 0 0 1 0 1 0
9 5 8 0 0 0 0 0 1