programing

Float 배열에서 Numpy isan()이 실패합니다(판다 데이터프레임 적용).

oldcodes 2023. 10. 11. 20:57
반응형

Float 배열에서 Numpy isan()이 실패합니다(판다 데이터프레임 적용).

팬더 데이터 프레임의 애플리케이션에서 나오는 플로트(일부 정상 숫자, 일부 nan) 배열이 있습니다.

어떤 이유로 이 배열에서 numpy.isan이 실패하고 있지만 아래와 같이 각 요소는 float이고 numpy.isan은 각 요소에서 올바르게 실행되며 변수의 유형은 확실히 numpy 배열입니다.

무슨 일이에요?

set([type(x) for x in tester])
Out[59]: {float}

tester
Out[60]: 
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
   nan, nan], dtype=object)

set([type(x) for x in tester])
Out[61]: {float}

np.isnan(tester)
Traceback (most recent call last):

File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

set([np.isnan(x) for x in tester])
Out[65]: {False, True}

type(tester)
Out[66]: numpy.ndarray

np.isnannp.float64와 같은 native dtype의 NumPy 배열에 적용할 수 있습니다.

In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)

그러나 개체 배열에 적용할 경우 TypeError가 발생합니다.

In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

Panda가 있으므로 대신 개체 또는 native dtype의 NumPy 배열을 사용할 수 있습니다.

In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)

In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)

참고:None또한 객체 배열에서 null 값으로 간주됩니다.

np.isnan()과 pd.isnull()의 좋은 대용어는

for i in range(0,a.shape[0]):
    if(a[i]!=a[i]):
       //do something here
       //a[i] is nan

난은 그 자신과 동등하지 않기 때문입니다.

@unutbu 답변 위에 pandas numpy 객체 배열을 native(float64) 유형으로 강제할 수 있습니다.

import pandas as pd
pd.to_numeric(df['tester'], errors='coerce')

errors='corce'를 지정하여 숫자 값으로 구문 분석할 수 없는 문자열을 NaN이 되도록 합니다.열 유형은 다음과 같습니다.dtype: float64,그리고 나서.isnan점검이 잘 되어야 합니다.

Pandas를 사용하여 csv 파일을 가져오는지 확인합니다.

import pandas as pd

condition = pd.isnull(data[i][j])

제 자신을 상기시키기 위해 이것에 대답하세요.해결하는 데 꼬박 하루가 걸렸습니다.암호를 깊이 파고든 후에, 저는 그것이_encodepy.py:

if values.dtype.kind in 'UO':
    # correct branch
else
    # wrong branch, if in this branch whatever data you give it will produce the error
    if np.isnan(known_values).any(): # here is problematic line

그래서 해결책은 매우 간단합니다, 단지.astype사용자의 데이터를np.object

언급URL : https://stackoverflow.com/questions/36000993/numpy-isnan-fails-on-an-array-of-floats-from-pandas-dataframe-apply

반응형