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

Python 创建循环以遍历具有相同变量名的不同数据集以更改值,python,loops,Python,Loops,我有4个数据集,分别命名为cluster_1、cluster_2、cluster_3、cluster_4。我想循环所有4个变量,并将变量的值更改为二进制,因此,如果它们大于或等于1,则设置为1,如果为0,则设置为0。所有数据集都有相同的变量名 在运行代码时,我不断发现错误“float”对象不可编辑。 binary是变量名列表,clusti是数据集列表 for i in binary: print(dataset[i]) dataset[i] = datas

我有4个数据集,分别命名为cluster_1、cluster_2、cluster_3、cluster_4。我想循环所有4个变量,并将变量的值更改为二进制,因此,如果它们大于或等于1,则设置为1,如果为0,则设置为0。所有数据集都有相同的变量名

在运行代码时,我不断发现错误“float”对象不可编辑。 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]) ```



试着用理解来做这件事

鉴于您上面的代码,
数据集的结构有两种不同的情况:

  • 它是一个列表列表,例如:

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

  • 这是一个关键的列表,例如:

    数据集={ '簇_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]
    
    dataset = {key: [int(y != 0) for y in val] for key, val in dataset.items()}
    
    这样做的目的是创建一个列表列表:

  • 外部列表理解
    [█ 对于数据集中的x]
    评估为对
    数据集中的每个列表
    x
    的理解
  • 内部列表理解
    [█ 对于x中的y]
    计算列表中的每个值
    y
  • 表达式
    int(y!=0)
    是三元表达式
    y(如果y==0,则为1)的简化,因为三元表达式在Python中很笨重<代码>y=如果y==0,则0
    将导致布尔值
    False
    ,否则
    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)
    
    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)
    
    收益率:

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

    案例2:如果
    数据集
    是一个dict,您可以使用dict理解:

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

    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)
    
    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],'cluster_3':[0,0,1,1],'cluster_4':[1,0,1,0]}


    数据集[i]的输出是什么?数据集的类型是什么?Python内置没有这样的东西。如果您正在使用某个框架,请相应地标记您的问题。可能应该解释
    int(y!=0)
    的作用,因为它不明显。
    int(y!=0)
    的解释是一种改进,但是-很抱歉这么迂腐-一些代码片段的格式丢失了,我不确定如何处理这些
    字符。@martineau块字符表示被解释部分排除的其他代码。