创建循环以遍历具有相同变量名的不同数据集以更改值

2024-10-02 12:32:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4个数据集,分别是cluster\u 1、cluster\u 2、cluster\u 3和cluster\u 4。我想循环所有4个变量,将变量的值改为二进制,所以如果它们大于或等于1,那么就设置为1,如果为0,则设置为0。所有数据集都有相同的变量名。你知道吗

我不断得到错误'浮'对象是不iterable运行代码时。 binary是变量名的列表,clusti是数据集的列表。你知道吗

    for i in binary:
        print(dataset[i])
        dataset[i] = dataset[i].apply(lambda x: [y if y== 0 else 1 for y in x]) ```



Tags: 数据对象代码in列表for错误二进制
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:13

试着用理解力来做这件事。你知道吗

根据上面的代码,dataset的结构有两种不同的情况:

  1. 它是一个列表列表,例如:

    数据集=[ [0,1,2,3], [1,2,3,4], [0,0,2,1], [1,0,1,0] ]

  2. 这是一个关键的清单,例如:

    数据集={ '簇1':[0,1,2,3], '簇2':[1,2,3,4], '簇3':[0,0,2,1], '簇4':[1,0,1,0] }

案例1:如果您的数据集是一个列表列表,您可以通过列表理解来完成:

dataset = [[int(y != 0) for y in x] for x in dataset]

这将创建一个列表列表:

  1. 外部列表理解[█ for x in dataset]评估为dataset中每个列表x的理解
  2. 内部列表理解[█ for y in x]计算列表x中的每个值y。你知道吗
  3. 表达式int(y != 0)是三元表达式y if y== 0 else 1的简化,因为三元表达式在Python中很笨拙。y !=0将导致布尔值False如果y==0,否则True。将其转换为int()将产生与三元逻辑相同的输出(0如果y是0,或者在所有其他情况下是1)。你知道吗

完整示例:

dataset = [
    [0,1,2,3], 
    [1,2,3,4], 
    [0,0,2,1], 
    [1,0,1,0]
]
dataset = [[int(y != 0) for y in x] for x in dataset]
print(dataset)

收益率:

[[0, 1, 1, 1], [1, 1, 1, 1]]

案例2:如果dataset是dict,您可以使用dict理解:

dataset = {key: [int(y != 0) for y in val] for key, val in dataset.items()}

完整示例:

dataset = {
    'cluster_1': [0,1,2,3],
    'cluster_2': [1,2,3,4],
    'cluster_3': [0,0,2,1],
    'cluster_4': [1,0,1,0]
}
dataset = {key: [int(y != 0) for y in val] for key, val in dataset.items()}
print(dataset)

收益率:

{'cluster_1': [0, 1, 1, 1], 'cluster_2': [1, 1, 1, 1], 'cluster_3': [0, 0, 1, 1], 'cluster_4': [1, 0, 1, 0]}

相关问题 更多 >

    热门问题