如何删除嵌套字典中id为nan的子字典?
解决嵌套字典中删除id为NaN的子字典问题
你之前的代码直接把整个字典转成DataFrame,这会导致结构混乱——外层字典的fields是列表、type是字符串,转成DataFrame后无法正确识别内部的NaN,所以得不到预期结果。以下是两种可行的解决方法:
方案一:纯Python处理(无需依赖pandas)
直接通过列表推导式过滤目标条目,用math.isnan()判断NaN值:
import math my_dict = {'fields': [{'id': 1.0, 'name': 'aaa', 'type': 'string'}, {'id': 3.0, 'name': 'eee', 'type': 'string'}, {'id': float('nan'), 'name': 'bbb', 'type': 'string'}, {'id': 4.0, 'name': 'ccc', 'type': 'string'}, {'id': float('nan'), 'name': 'ddd', 'type': 'string'}], 'type': 'struct' } # 过滤id为NaN的子字典,保留其他条目 my_updated_dict = { 'fields': [item for item in my_dict['fields'] if not math.isnan(item['id'])], 'type': my_dict['type'] } print(my_updated_dict)
方案二:正确使用pandas处理
如果一定要用pandas,需单独处理fields列表,避免破坏原字典结构:
import pandas as pd my_dict = {'fields': [{'id': 1.0, 'name': 'aaa', 'type': 'string'}, {'id': 3.0, 'name': 'eee', 'type': 'string'}, {'id': float('nan'), 'name': 'bbb', 'type': 'string'}, {'id': 4.0, 'name': 'ccc', 'type': 'string'}, {'id': float('nan'), 'name': 'ddd', 'type': 'string'}], 'type': 'struct' } # 将fields列表转成DataFrame,仅删除id列含NaN的行,再转回字典列表 filtered_fields = pd.DataFrame(my_dict['fields']).dropna(subset=['id']).to_dict('records') # 构建最终字典 my_updated_dict = { 'fields': filtered_fields, 'type': my_dict['type'] } print(my_updated_dict)
内容的提问来源于stack exchange,提问作者Hiwot
相关产品推荐
相关产品推荐

