【问题标题】:Remove dictionary items in a loop循环删除字典项
【发布时间】:2020-01-30 06:24:36
【问题描述】:

我正在尝试测试 df 中的哪些列始终具有相同的值,并将它们从字典中删除。然而,即使 x1 和 x2 都应该被删除,这不会发生。

data = [[0.1, 0.3, 0.2, 0.3, 0.4], [0.1, 0.3, 0.3, 0.6, 0.5], [0.1, 0.3, 0.8, 0.4, 0.3]]
df = pd.DataFrame(data, columns = ['x1', 'x2', 'x3', 'y1', 'y2']) 

vars1 = ["x1", "x2", "x3"]
vars2 = ["x1", "x3"]

vars_used = {"y1": vars1, "y2": vars2}

for ex_var in vars_used.get("y1"):
    if df[ex_var].value_counts(normalize=True).values.max() > np.float(0.999):
        vars_used.get("y1").remove(ex_var)

vars_used["y1"]

我得到的输出是 ['x2', 'x3'],而不是 ['x3']。如果我在循环外使用相同的代码,它工作正常。为所需行为寻找简单的解决方案。

【问题讨论】:

    标签: python pandas dictionary for-loop


    【解决方案1】:

    你可以这样做,你知道如果列中只有 1 个唯一值,那么它们都是重复的:

    for col in df.columns:
        if len(df[col].unique())==1:
            vars_used['y1'].remove(col)
    
    vars_used
    
    {'y1': ['x3'], 'y2': ['x1', 'x3']}
    

    【讨论】:

    • 感谢分享。
    【解决方案2】:

    问题:

    for ex_var in vars_used.get("y1"):
        print(ex_var)
        if df[ex_var].value_counts(normalize=True).values.max() > np.float(0.999):
            vars_used.get("y1").remove(ex_var)
    
    x1
    x3
    

    您可以看到 x2 从未经过测试,这是因为您在循环中删除了 x1

    你可以这样做:

    remove_list=[]
    for ex_var in vars_used.get("y1"):
        if df[ex_var].value_counts(normalize=True).values.max() > np.float(0.999):
            remove_list.append(ex_var)
    
    [vars_used.get("y1").remove(key) for key in remove_list]
    vars_used["y1"]
    

    输出:

    ['x3']
    

    一个优雅的解决方案:

    same_value=[*df.columns[df.nunique().eq(1)]]
    print(same_value)
    
    ['x1', 'x2']
    

    for key in vars_used:  
        for value in same_value: 
            try:
                vars_used[key].remove(value)
            except:
                pass
    
    print(vars_used)
    
    {'y1': ['x3'], 'y2': ['x3']}
    

    【讨论】:

    • 很高兴为您提供帮助!
    猜你喜欢
    • 2011-03-09
    • 2014-06-28
    • 2022-01-05
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2018-10-22
    相关资源
    最近更新 更多