如何解决为什么循环在onehot编码中不起作用
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]
怎么了?
解决方法
如果要使用i
中具有的变量for i in data.columns:
,则不应使用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,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,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,})
#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,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。