列表中具有值的字典:
a:
[{'name': 'toom D',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000'),
'expiry': None,
'renew': nan},
{'name': 'russ arnold',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000'),
'expiry': None,
'renew': nan},
{'name': 'cart wright',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000'),
'expiry': 'no',
'renew': 'yes'}]
如何删除list(dict)中具有nan,None,NaN值的记录的整个行
expected_output:
b:
[{'name': 'toom D',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000')
},
{'name': 'russ arnold',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000')
},
{'name': 'cart wright',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000'),
'expiry': 'no',
'renew': 'yes'}]
答案 0 :(得分:4)
假设nan
是math.nan
,您可以这样做:
for sub_a in a:
for key, val in sub_a.copy().items():
try:
if val is None or math.isnan(val):
del sub_a[key]
except TypeError:
continue
以上内容将对原始a
进行更改。如果要使用单独的dict
b
作为输出,则可以执行b = a.copy()
并将外部a
中的b
替换为for
。 / p>
我将math.isnan
包裹在try / except
中的原因是因为并非dict
中的所有值都是实数,有些不是字符串。如果抛出TypeError
,我们知道该值不可能为nan
。
结果dict
为:
[{'name': 'toom D',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000')},
{'name': 'russ arnold',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000')},
{'name': 'cart wright',
'status_ref': True,
'date_status_ref': Timestamp('2018-12-17 09:29:58.864000'),
'expiry': 'no',
'renew': 'yes'}]
答案 1 :(得分:1)
您可以遍历字典的键/值并对其进行过滤。像这样:
.
答案 2 :(得分:1)
不是最好的解决方案,但是您可以尝试。
a = [{'name': 'toom D',
'status_ref': True,
'date_status_ref': 'a',
'expiry': None,
'renew': nan},
{'name': 'russ arnold',
'status_ref': True,
'date_status_ref': 'b',
'expiry': None,
'renew': nan},
{'name': 'cart wright',
'status_ref': True,
'date_status_ref': 'c',
'expiry': 'no',
'renew': 'yes'}]
for d in a:
for k,v in d.copy().items():
if (str(v) in ['None', 'NaN', 'nan']):
d.pop(k)
a:
[{'name': 'toom D', 'status_ref': True, 'date_status_ref': 'a'},
{'name': 'russ arnold', 'status_ref': True, 'date_status_ref': 'b'},
{'name': 'cart wright',
'status_ref': True,
'date_status_ref': 'c',
'expiry': 'no',
'renew': 'yes'}]