2014-06-05 25 views
4

我有一个填充了我导入的两个文件中的数据的字典,但是其中一些数据以nan形式出现。如何用nan删除这些数据?有没有办法从充满数据的字典中删除nan?

我的代码是:

import matplotlib.pyplot as plt 
from pandas.lib import Timestamp 
import numpy as np 
from datetime import datetime 
import pandas as pd 
import collections 

orangebook = pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\products2.txt',sep='~', parse_dates=['Approval_Date']) 
specificdrugs=pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\Drugs.txt',sep=',') 

"""This is a dictionary that collects data from the .txt file 
This dictionary has a key,value pair for every generic name with its corresponding approval date """ 
drugdict={} 
for d in specificdrugs['Generic Name']: 
    drugdict.dropna() 
    drugdict[d]=orangebook[orangebook.Ingredient==d.upper()]['Approval_Date'].min() 

我应该添加或采取从这个码远,以确保有没有钥匙,在与南的值的字典值对?

+0

你可以在字典理解中使用'filter()'。请参阅以供参考:http://stackoverflow.com/a/16589453/758446。 – BlackVegetable

+0

是你的字典存储在字典作为键或值? – twinlakes

回答

0

而不是试图从字典中删除NaNs,你应该进一步调查为什么NaNs首先到达那里。

在字典中使用NaN变得困难,因为NaN本身并不相同。

检查了这一点的详细信息:NaNs as key in dictionaries

10
from math import isnan 

如果NaN是被存储为键:

# functional 
clean_dict = filter(lambda k: not isnan(k), my_dict) 

# dict comprehension 
clean_dict = {k: my_dict[k] for k in my_dict if not isnan(k)} 

如果NaN是被存储为值:

# functional 
clean_dict = filter(lambda k: not isnan(my_dict[k]), my_dict) 

# dict comprehension 
clean_dict = {k: my_dict[k] for k in my_dict if not isnan(my_dict[k])} 
1

随着simplejson

import simplejson 

clean_dict = simplejson.loads(simplejson.dumps(my_dict, ignore_nan=True)) 
## or depending on your needs 
clean_dict = simplejson.loads(simplejson.dumps(my_dict, allow_nan=False)) 
相关问题