Skip to main content
 首页 » 编程设计

python之如何从包含字符串条目的列表列表中删除 NaN

2025年05月04日25del

我正在尝试从列表列表(带有字符串条目)中删除所有 nans,我的数据如下:

[['beer', 'nuts', nan],  
['beer', 'butter', 'apple'],  
['beer', 'nuts', 'cheese'],  
['beer', 'bananas', nan],  
['beer', 'nuts', 'apple']] 

我想得到这个结果:

[['beer', 'nuts'],  
['beer', 'butter', 'apple'],  
['beer', 'nuts', 'cheese'],  
['beer', 'bananas'],  
['beer', 'nuts', 'apple']] 

我试过从(How to remove nan's from list of lists? [duplicate] 和 How to delete [NaN] from a list of lists?)中得到答案,即:

import math 
nan = float('nan') 
 
store_data_list = [[x for x in y if not math.isnan(x)] for y in store_data_list] #remove nans from list of lists 
 
#AND 
 
store_data_list = [xs for xs in store_data_list if not any(math.isnan(x) for x in xs)] 
 
#AND 
 
store_data_list = [[x for x in y if not np.isnan(x)] for y in store_data_list] 

两者在我的实例中似乎都不起作用。我收到错误:

TypeError: must be real number, not str

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

谁能指出我做错了什么

请您参考如下方法:

一种选择是将项目与其自身进行比较(这对于 nan 是错误的)

nan = float('nan') 
data = [['beer', 'nuts', nan],  
        ['beer', 'butter', 'apple'],  
        ['beer', 'nuts', 'cheese'],  
        ['beer', 'bananas', nan],  
        ['beer', 'nuts', 'apple']] 
[[i for i in j if i == i] for j in data] 

给予

[['beer', 'nuts'], 
 ['beer', 'butter', 'apple'], 
 ['beer', 'nuts', 'cheese'], 
 ['beer', 'bananas'], 
 ['beer', 'nuts', 'apple']]