如何从列表中删除带有NaN值的字典

时间:2020-04-03 22:13:57

标签: python dictionary nan

这似乎是一件相当简单的事情,但我还没有在这里找到答案。

我有一个词典列表,列表中的某些词典具有NaN值。如果其中有NaN值,我只需要从列表中删除任何字典即可。

我自己尝试了几种不同的方法。这是使用filter和lambda函数的一次尝试,该函数得到TypeError(“必须是实数,而不是dict_values,”这才有意义):

from math import isnan

def remove_dictionaries_missing_data(list_of_dictionaries):
    return list(filter(lambda dictionary: not math.isnan(dictionary.values()), \
                                          list_of_dictionaries))

我还尝试了几个嵌套循环,并且确实不确定一些代码,并得到了相同的错误:

from math import isnan

def remove_dictionaries_missing_data(list_of_dictionaries):
    cleaned_list = []
    for dictionary in list_of_dictionaries:
        if not math.isnan(dictionary[value] for value in dictionary.values()):
            cleaned_list.append(dictionary)
    return cleaned_list

...最后只是列表理解(相同的错误):

from math import isnan
def remove_movies_missing_data(movies):
    return [movie for movie in movies if not math.isnan(movie.values())]

编辑:

与我正在使用的列表相同:

[{'year': 2013,
  'imdb': 'tt2005374',
  'title': 'The Frozen Ground',
  'test': 'nowomen-disagree',
  'clean_test': 'nowomen',
  'binary': 'FAIL',
  'budget': 19200000,
  'domgross': nan,
  'intgross': nan,
  'code': '2013FAIL',
  'budget_2013$': 19200000,
  'domgross_2013$': nan,
  'intgross_2013$': nan,
  'period code': 1.0,
  'decade code': 1.0},
 {'year': 2011,
  'imdb': 'tt1422136',
  'title': 'A Lonely Place to Die',
  'test': 'ok',
  'clean_test': 'ok',
  'binary': 'PASS',
  'budget': 4000000,
  'domgross': nan,
  'intgross': 442550.0,
  'code': '2011PASS',
  'budget_2013$': 4142763,
  'domgross_2013$': nan,
  'intgross_2013$': 458345.0,
  'period code': 1.0,
  'decade code': 1.0},
... ]

1 个答案:

答案 0 :(得分:2)

<StackPanel Grid.Column="0"> <Button x:Name="btn" Content="Fill with green" /> </StackPanel> <Ellipse Grid.Column="1" Stroke="Black"> <Ellipse.Style> <Style TargetType="{x:Type Ellipse}"> <Style.Triggers> <DataTrigger Binding="{Binding IsMouseDirectlyOver, ElementName=btn}" Value="True"> <Setter Property="Fill" Value="LimeGreen"/> </DataTrigger> </Style.Triggers> </Style> </Ellipse.Style> </Ellipse> 是字典中所有值的生成器。您需要在各个值上调用dictionary.values()。您可以使用math.isnan()执行此操作:

any()