본문 바로가기
파이썬

파이썬 NaN이 포함 된 목록을 확인하는 방법

by º기록 2020. 12. 30.
반응형

내 for 루프에서 내 코드는 다음과 같은 목록을 생성합니다.

list([0.0,0.0]/sum([0.0,0.0]))

루프는 모든 종류의 다른 수 벡터를 생성하지만 [nan, nan] 도 생성합니다.이를 방지하기 위해 아래의 것과 같은 것을 방지하기 위해 조건부를 입력하려고했지만 그렇지 않습니다. true를 반환합니다.

nan in list([0.0,0.0]/sum([0.0,0.0]))
>>> False

사실을 반환해야하지 않습니까?

여기에 이미지 설명 입력

내가로드 한 라이브러리 :

import PerformanceAnalytics as perf
import DataAnalyticsHelpers
import DataHelpers as data
import OptimizationHelpers as optim
from matplotlib.pylab import *
from pandas.io.data import DataReader
from datetime import datetime,date,time
import tradingWithPython as twp
import tradingWithPython.lib.yahooFinance as data_downloader # used to get data from yahoo finance
import pandas as pd # as always.
import numpy as np
import zipline as zp
from scipy.optimize import minimize
from itertools import product, combinations
import time
from math import isnan

 

해결 방법

 

별 가져 오기를 통해 간접적으로 numpy 를 범위로 가져 오기 때문에 이것이 의미가 있다고 생각합니다.

>>> import numpy as np
>>> [0.0,0.0]/0
Traceback (most recent call last):
  File "<ipython-input-3-aae9e30b3430>", line 1, in <module>
    [0.0,0.0]/0
TypeError: unsupported operand type(s) for /: 'list' and 'int'

>>> [0.0,0.0]/np.float64(0)
array([ nan,  nan])

그랬을 때

from matplotlib.pylab import *

numpy.sum 에서 가져 왔습니다.

>>> from matplotlib.pylab import *
>>> sum is np.sum
True
>>> [0.0,0.0]/sum([0.0, 0.0])
array([ nan,  nan])

nan 개체 ( nan 는 일반적으로 고유하지 않음)가 ID를 통해 목록에 있는지 테스트 할 수 있지만 시도해 보면 동등성을 통해 테스트하는 것처럼 보이는 배열 nan! = nan :

>>> nan == nan
False
>>> nan == nan, nan is nan
(False, True)
>>> nan in [nan]
True
>>> nan in np.array([nan])
False

np.isnan 을 사용할 수 있습니다.

>>> np.isnan([nan, nan])
array([ True,  True], dtype=bool)
>>> np.isnan([nan, nan]).any()
True

 

참조 페이지 https://stackoverflow.com/questions/20319813

 

 

반응형

댓글