Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';t循环在onehot编码中工作_Python_One Hot Encoding - Fatal编程技术网

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