有没有方法从填充数据的字典中移除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()
我应该在这段代码里加什么或者去掉什么,才能确保字典里没有值为nan的键值对呢?
5 个回答
0
虽然这个方法已经有点老了,但对我来说很有效,而且简单——在读取CSV文件的时候,先把里面的NaN(缺失值)去掉:
orangebook = pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\products2.txt',sep='~', parse_dates=['Approval_Date']).dropna()
我还喜欢在这个过程中把数据转换成字典格式:
orangebook = pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\products2.txt',sep='~', parse_dates=['Approval_Date']).dropna().to_dict()
1
与其试图从你的字典中去掉NaN(不是一个数字),不如先搞清楚为什么会有NaN出现在那里。
在字典中使用NaN会很麻烦,因为NaN和它自己是不相等的。
想了解更多信息,可以看看这个链接:NaNs作为字典的键
2
一种稍微修改过的方式,就是使用 pandas.isna() 这个功能,具体用法如下:
# functional
clean_dict = filter(lambda k: not pd.isna(k), my_dict)
# dict comprehension
clean_dict = {k: my_dict[k] for k in my_dict if not pd.isna(k)}
如果缺失值(nans)是作为键存储的:
# functional
clean_dict = filter(lambda k: not pd.isna(my_dict[k]), my_dict)
# dict comprehension
clean_dict = {k: my_dict[k] for k in my_dict if not pd.isna(my_dict[k])}
如果缺失值是作为值存储的:
这样即使字段不是数字类型,它也能正常工作。
5
使用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))
30
from math import isnan
# 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)}
# 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])}
如果把“nans”当作键来存储:
如果把“nans”当作值来存储: