Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 筛选空键组:筛选功能_Python_Dictionary_Filter - Fatal编程技术网

Python 筛选空键组:筛选功能

Python 筛选空键组:筛选功能,python,dictionary,filter,Python,Dictionary,Filter,问题:在筛选空键时,再次将过滤器(无,字典)转换为字典 我正在尝试使用熊猫数据框架处理一些实验室数据。考虑到前两列,我使用字典将这些数据分组;请参阅以下代码: d = {'col1': [1, 1, 1, 2], 'col2': [1, 2, 2, 2], 'col3': [1, 2 ,3, 4], 'col4': [2,1,1,1,], 'col5': [2,1,0,0], 'col6': [2,1,3,1]} df = pd.DataFrame(data=d) all_groups = {}

问题:在筛选空键时,再次将
过滤器(无,字典)
转换为字典

我正在尝试使用熊猫数据框架处理一些实验室数据。考虑到前两列,我使用字典将这些数据分组;请参阅以下代码:

d = {'col1': [1, 1, 1, 2], 'col2': [1, 2, 2, 2], 'col3': [1, 2 ,3, 4], 'col4': [2,1,1,1,], 'col5': [2,1,0,0], 'col6': [2,1,3,1]}
df = pd.DataFrame(data=d)
all_groups = {}
for i in df.col1.unique():
    for j in df.col2.unique():
        all_groups[f'{i}-{j}'] = df[(df.col1 == i) & (df.col2 == j)]
然后,我想使用函数filter:
filter(无,所有组)
清除所有空键,这似乎是以下问题的答案:

[

文件中说:

返回一个迭代器,该迭代器生成函数(item)为true的iterable项。如果函数为None,则返回为true的项

我需要将这个返回的序列再次转换为dictionary,但我不知道如何转换,因为它只是一个filter对象

编辑1:我已尝试使用lambda函数:

 hello = dict(filter(lambda x: len(x) != 0, all_groups))

ValueError: dictionary update sequence element #0 has length 12; 2 is required

在您的特定情况下,您可能会得到空的
列表
作为值,要过滤此值,您可以执行以下操作:

  • 通过使用列表理解(这将创建一个新的dict)
  • 通过使用for循环并删除以空列表作为值的键(就地):
  • 使用
    filter
    内置方法(这将创建一个新的dict)

  • 如果您有一个dict,其值为
    pd.DataFrame
    ,则可以过滤空数据帧,如下所示:

    dict(filter(lambda x: not x[1].empty, all_groups.items()))
    
    输出:

    {'1-1':    col1  col2  col3  col4  col5  col6
     0     1     1     1     2     2     2,
     '1-2':    col1  col2  col3  col4  col5  col6
     1     1     2     2     1     1     1
     2     1     2     3     1     0     3,
     '2-2':    col1  col2  col3  col4  col5  col6
     3     2     2     4     1     0     1}
    

    这个问题的另一个可能答案是,通过使用lambda函数:

    hello = dict(filter(lambda x: len(x[1]) != 0, all_groups.items()))
    

    我对第三个选项特别感兴趣。但是当我尝试lambda函数时,它对我不起作用。顺便说一句,你的答案表明数据帧的真值不明确。现在我可以使用:dict(filter(lambda x:len(x[1])!=0,dictionary.items())(如果你想修改你的答案).非常感谢!!@Nankin您现在可以查看我的答案,如果这个答案解决了您的问题,您可以投票或接受,谢谢!
    dict(filter(lambda x: not x[1].empty, all_groups.items()))
    
    {'1-1':    col1  col2  col3  col4  col5  col6
     0     1     1     1     2     2     2,
     '1-2':    col1  col2  col3  col4  col5  col6
     1     1     2     2     1     1     1
     2     1     2     3     1     0     3,
     '2-2':    col1  col2  col3  col4  col5  col6
     3     2     2     4     1     0     1}
    
    hello = dict(filter(lambda x: len(x[1]) != 0, all_groups.items()))