从嵌套字典中删除值的正确方法
Correct Way to Remove Values from Nested Dictionary
我正在处理来自 csv 文件的数据集。
我用这个 dic = df.to_dict()
将数据导入字典
这很好用,但由于数据的结构方式,我得到了字典的字典。嵌套字典有多个 "nan" 值。我需要删除所有 nan 值,字典可以保持嵌套状态,或者我可以使用普通字典。
字典中的数据以这种格式打印:
{'1/13/2018': {0: 'Monday', 1: 'Red', 2: 'Violet', 3: 'Aqua', 4: 'Pink', 5: 'White', 6: nan, 7: nan, 8: nan},
这是我的代码示例:
df = pd.read_csv(infile, parse_dates=True, infer_datetime_format=True)
dic = df.to_dict()
我已经尝试了 here 的建议,并尝试通过一些理解来做到这一点,但我认为由于嵌套的性质,我不确定如何适应它。
我也试过这样循环:
value_list = []
key_list = []
for k, v in dic.items():
key_list.append(k)
for c, q in v.items():
if str(q) != 'nan':
value_list.append(q)
else:
pass
我希望我可以从这两个列表中创建一个新的 dic。然而,数据模糊在一起,很难将值集分开。必须有更好的 pythonic 方法来做到这一点。
递归亲爱的OP:
from math import isnan
def remove_nans(d):
for key in d.copy():
if type(d[key]) == float and isnan(d[key]):
del d[key]
elif type(d[key]) == dict:
remove_nans(d[key])
在您的 dict
上调用 remove_nans
,它将完成工作。
我正在处理来自 csv 文件的数据集。
我用这个 dic = df.to_dict()
这很好用,但由于数据的结构方式,我得到了字典的字典。嵌套字典有多个 "nan" 值。我需要删除所有 nan 值,字典可以保持嵌套状态,或者我可以使用普通字典。
字典中的数据以这种格式打印:
{'1/13/2018': {0: 'Monday', 1: 'Red', 2: 'Violet', 3: 'Aqua', 4: 'Pink', 5: 'White', 6: nan, 7: nan, 8: nan},
这是我的代码示例:
df = pd.read_csv(infile, parse_dates=True, infer_datetime_format=True)
dic = df.to_dict()
我已经尝试了 here 的建议,并尝试通过一些理解来做到这一点,但我认为由于嵌套的性质,我不确定如何适应它。
我也试过这样循环:
value_list = []
key_list = []
for k, v in dic.items():
key_list.append(k)
for c, q in v.items():
if str(q) != 'nan':
value_list.append(q)
else:
pass
我希望我可以从这两个列表中创建一个新的 dic。然而,数据模糊在一起,很难将值集分开。必须有更好的 pythonic 方法来做到这一点。
递归亲爱的OP:
from math import isnan
def remove_nans(d):
for key in d.copy():
if type(d[key]) == float and isnan(d[key]):
del d[key]
elif type(d[key]) == dict:
remove_nans(d[key])
在您的 dict
上调用 remove_nans
,它将完成工作。