Python 为什么';t循环在onehot编码中工作
错误是什么?如果您想将Python 为什么';t循环在onehot编码中工作,python,one-hot-encoding,Python,One Hot Encoding,错误是什么?如果您想将中的变量i用于数据中的i。列:,那么您不应该使用数据。i而是数据[i](没有”) 如果您使用更好的名称,例如,column\u name for i in data.columns: top_10 = data[i].value_counts().sort_values(ascending=False).head(10).index data.i类似于data[“i”],它的意思是带有名称的列,而不是变量i 我不知道你想用嵌套的for-循环做什么,但是你也应
中的变量i
用于数据中的i。列:
,那么您不应该使用数据。i
而是数据[i]
(没有”
)
如果您使用更好的名称,例如,column\u name
for i in data.columns:
top_10 = data[i].value_counts().sort_values(ascending=False).head(10).index
data.i
类似于data[“i”]
,它的意思是带有名称的列,而不是变量i
我不知道你想用嵌套的
for
-循环做什么,但是你也应该使用数据[I]
而不是数据[“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)
但如果没有一些示例数据,很难说它是否正确
编辑: 最少的工作示例 我使用
random.seed(0)
始终获得相同的值
我使用top_3
查看屏幕上的所有值
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)
结果:
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)
你能详细说明一下吗?什么是预期输出,什么是观察到的输出?我的预期输出应该是“每个列的前10个唯一值应该作为新列添加到数据集中”,您实际看到的行为是什么?在data.i.value_counts()中的x代表x在这一部分我得到了类似的错误“AttributeError:'DataFrame'对象没有属性'i',您正在使用
i
作为data
的属性(在data.i.value\u counts()
)这可能会导致问题。我是一个初学者,非常感谢@furas,这是一个非常清楚的解释。再次感谢。
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)
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