programing

ix 또는 iloc을 사용하여 panda DataFrame에서 특정 값(셀 내)이 NaN인지 확인

padding 2023. 10. 30. 20:47
반응형

ix 또는 iloc을 사용하여 panda DataFrame에서 특정 값(셀 내)이 NaN인지 확인

내게 다음이 있다고 치자.pandas DataFrame:

import pandas as pd
df = pd.DataFrame({"A":[1,pd.np.nan,2], "B":[5,6,0]})

다음과 같이 보입니다.

>>> df
     A  B
0  1.0  5
1  NaN  6
2  2.0  0

첫번째 옵션

특정 값이 다음 값인지 확인할 수 있는 한 가지 방법을 알고 있습니다.NaN, 다음과 같습니다.

>>> df.isnull().ix[1,0]
True

두 번째 옵션(작동하지 않음)

나는 아래 옵션을 생각했다, 사용.ix, 효과는 있겠지만 그렇지는 않습니다.

>>> df.ix[1,0]==pd.np.nan
False

저도 노력했습니다.iloc동일한 결과:

>>> df.iloc[1,0]==pd.np.nan
False

그러나 다음을 사용하여 해당 값을 확인하면ix아니면iloc알겠습니다.

>>> df.ix[1,0]
nan
>>> df.iloc[1,0]
nan

그렇다면 두 번째 옵션은 왜 작동하지 않는 것일까요?확인이 가능한가요?NaN값 사용ix아니면iloc?

시도해 보기:

In [107]: pd.isnull(df.iloc[1,0])
Out[107]: True

업데이트: 최신 Pandas 버전에서는 pd.isna():

In [7]: pd.isna(df.iloc[1,0])
Out[7]: True

위의 답변은 훌륭합니다.더 나은 이해를 위한 예시도 마찬가지입니다.

>>> import pandas as pd
>>>
>>> import numpy as np
>>>
>>> pd.Series([np.nan, 34, 56])
0     NaN
1    34.0
2    56.0
dtype: float64
>>>
>>> s = pd.Series([np.nan, 34, 56])
>>> pd.isnull(s[0])
True
>>>

저도 몇 번 시도했지만, 그 다음 시도는 효과가 없었습니다.덕분에.@MaxU.

>>> s[0]
nan
>>>
>>> s[0] == np.nan
False
>>>
>>> s[0] is np.nan
False
>>>
>>> s[0] == 'nan'
False
>>>
>>> s[0] == pd.np.nan
False
>>>

pd.isna(cell_value)주어진 셀 값이 nan인지 확인하는 데 사용될 수 있습니다.아니면.pd.notna(cell_value)그 반대를 확인하기 위해서 입니다.

팬더의 소스 코드:

def isna(obj):
    """
    Detect missing values for an array-like object.

    This function takes a scalar or array-like object and indicates
    whether values are missing (``NaN`` in numeric arrays, ``None`` or ``NaN``
    in object arrays, ``NaT`` in datetimelike).

    Parameters
    ----------
    obj : scalar or array-like
        Object to check for null or missing values.

    Returns
    -------
    bool or array-like of bool
        For scalar input, returns a scalar boolean.
        For array input, returns an array of boolean indicating whether each
        corresponding element is missing.

    See Also
    --------
    notna : Boolean inverse of pandas.isna.
    Series.isna : Detect missing values in a Series.
    DataFrame.isna : Detect missing values in a DataFrame.
    Index.isna : Detect missing values in an Index.

    Examples
    --------
    Scalar arguments (including strings) result in a scalar boolean.

    >>> pd.isna('dog')
    False

    >>> pd.isna(np.nan)
    True

df.isnull().loc[1,0]

위의 구문을 시도해 보았는데 효과가 있었습니다.

저는 몇 가지 해결책을 마련했습니다.

x = [np.nan]

In [4]: x[0] == np.nan
Out[4]: False

그러나:

In [5]: np.nan in x
Out[5]: True

method 구현 목록을 볼 수 있으므로 method 구현이 작동하는 이유를 파악할 수 있습니다.

언급URL : https://stackoverflow.com/questions/47440077/checking-if-particular-value-in-cell-is-nan-in-pandas-dataframe-not-working-us

반응형