Tôi có một từ điển chứa đầy dữ liệu từ hai tệp tôi đã nhập, nhưng một số dữ liệu được phát hành dưới dạng NAN. Làm cách nào để loại bỏ các phần dữ liệu với NAN?
Mã của tôi là:
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()Tôi nên thêm hoặc lấy đi từ mã này để đảm bảo rằng không có khóa, giá trị nào trong từ điển với giá trị của NAN?
Đã hỏi ngày 5 tháng 6 năm 2014 lúc 19:09Jun 5, 2014 at 19:09
2
from math import isnan
Nếu Nans đang được lưu trữ dưới dạng chìa khóa:
# 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)}Nếu NAN đang được lưu trữ dưới dạng giá trị:
# 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])}Đã trả lời ngày 5 tháng 6 năm 2014 lúc 19:19Jun 5, 2014 at 19:19
Twinlakestwinlakestwinlakes
8,5905 Huy hiệu vàng29 Huy hiệu bạc38 Huy hiệu đồng5 gold badges29 silver badges38 bronze badges
2
Với 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))Đã trả lời ngày 3 tháng 4 năm 2017 lúc 19:03Apr 3, 2017 at 19:03
Hangchangchangc
4.0909 Huy hiệu vàng32 Huy hiệu bạc59 Huy hiệu Đồng9 gold badges32 silver badges59 bronze badges
1
Thay vì cố gắng loại bỏ NAN khỏi từ điển của bạn, bạn nên điều tra thêm lý do tại sao Nans lại đến đó ngay từ đầu.
Thật khó để sử dụng Nans trong một từ điển, vì một NAN không bằng chính nó.
Kiểm tra điều này để biết thêm thông tin: Nans làm chìa khóa trong từ điển
Đã trả lời ngày 5 tháng 6 năm 2014 lúc 19:12Jun 5, 2014 at 19:12
Greg Hilstongreg HilstonGreg Hilston
2.3092 Huy hiệu vàng23 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges23 silver badges31 bronze badges
Một phiên bản được sửa đổi một chút của cách tiếp cận của Twinlakes sẽ là sử dụng chức năng pandas.isna () như sau: Nếu Nans đang được lưu trữ dưới dạng khóa:
# 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)}Nếu NAN đang được lưu trữ dưới dạng giá trị:
# 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])}Đã trả lời ngày 5 tháng 6 năm 2014 lúc 19:19
TwinlakestwinlakesApr 30 at 23:57
8,5905 Huy hiệu vàng29 Huy hiệu bạc38 Huy hiệu đồngRaghul Raj M
Với SimpleJson8 silver badges24 bronze badges
Đã trả lời ngày 3 tháng 4 năm 2017 lúc 19:03
orangebook = pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\products2.txt',sep='~', parse_dates=['Approval_Date']).dropna()Hangchangc
orangebook = pd.read_csv('C:\Users\WEGWEIS_JAKE\Desktop\Work Programs\Code Files\products2.txt',sep='~', parse_dates=['Approval_Date']).dropna().to_dict()4.0909 Huy hiệu vàng32 Huy hiệu bạc59 Huy hiệu ĐồngDec 16, 2019 at 13:08
Thay vì cố gắng loại bỏ NAN khỏi từ điển của bạn, bạn nên điều tra thêm lý do tại sao Nans lại đến đó ngay từ đầu.Colin Miles
Thật khó để sử dụng Nans trong một từ điển, vì một NAN không bằng chính nó.4 silver badges5 bronze badges
1