programing

판다 데이터 프레임에서 NaN으로 셀을 설정하는 방법

abcjava 2023. 7. 10. 21:58
반응형

판다 데이터 프레임에서 NaN으로 셀을 설정하는 방법

데이터 프레임의 열에 있는 잘못된 값을 NaN으로 바꾸고 싶습니다.

mydata = {'x' : [10, 50, 18, 32, 47, 20], 'y' : ['12', '11', 'N/A', '13', '15', 'N/A']}
df = pd.DataFrame(mydata)

df[df.y == 'N/A']['y'] = np.nan

하지만 마지막 줄은 실패하고 경고를 던집니다. 왜냐하면 그것은 다음의 복사본을 작업하고 있기 때문입니다.df그렇다면, 이것을 다루는 올바른 방법은 무엇일까요?다양한 솔루션을 통해iloc또는ix하지만 여기서 저는 부울 조건을 사용해야 합니다.

그냥 쓰기replace:

In [106]:
df.replace('N/A',np.NaN)

Out[106]:
    x    y
0  10   12
1  50   11
2  18  NaN
3  32   13
4  47   15
5  20  NaN

당신이 시도하는 것은 체인 인덱싱이라고 합니다: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

사용할 수 있습니다.loc원래 dF에서 작동하도록 하려면:

In [108]:
df.loc[df['y'] == 'N/A','y'] = np.nan
df

Out[108]:
    x    y
0  10   12
1  50   11
2  18  NaN
3  32   13
4  47   15
5  20  NaN

위의 대부분의 응답은 외부 모듈을 가져와야 합니다.import numpy as np

판다 자체에 내장된 솔루션이 있습니다.pd.NA다음과 같이 사용:

df.replace('N/A', pd.NA)

사용 중replace문제가 해결되는 것 같습니다, 저는 대안을 제안하고 싶습니다.열에 숫자 값과 일부 문자열 값이 혼합되어 있는 경우 문자열을 np.nan으로 대체하지 않고 전체 열을 적절하게 만드는 데 문제가 있습니다.원래 열은 객체 유형일 가능성이 높습니다.

Name: y, dtype: object

실제로 필요한 것은 숫자 열로 만드는 것입니다(적절한 유형을 가지며 상당히 빠름). 숫자가 아닌 모든 값은 NaN으로 대체됩니다.

따라서, 좋은 변환 코드는

pd.to_numeric(df['y'], errors='coerce')

명시하다errors='coerce'숫자 값으로 구문 분석할 수 없는 문자열을 강제로 NaN으로 만듭니다.열 유형은 다음과 같습니다.

Name: y, dtype: float64

바꾸기를 사용할 수 있습니다.

df['y'] = df['y'].replace({'N/A': np.nan})

또한 다음 사항에 유의해야 합니다.inplace에 대한 매개 변수.replace다음과 같은 작업을 수행할 수 있습니다.

df.replace({'N/A': np.nan}, inplace=True)

이렇게 하면 복사본을 만들지 않고 df의 모든 인스턴스가 바뀝니다.

마찬가지로 빈 문자열 또는 없음 값과 같은 다른 유형의 알 수 없는 값이 발생하는 경우:

df['y'] = df['y'].replace({'': np.nan})

df['y'] = df['y'].replace({None: np.nan})

참고 자료: 판다 최신판 - 교체

판다 1.0.0부터는 더 이상 데이터 프레임에 numpy를 사용하여 null 값을 생성할 필요가 없습니다.대신에 여러분은 그냥 팬더를 사용할 수 있습니다.NA(타입 팬더)._libs.slabs.slabs.NAType). 따라서 데이터 프레임 내에서는 null로 처리되지만 데이터 프레임 컨텍스트 외부에서는 null로 처리되지 않습니다.

df.loc[df.y == 'N/A',['y']] = np.nan

이것으로 문제가 해결됩니다.더블 []을(를) 사용하여 데이터 프레임의 복사본을 작업을 수행합니다.한 통화에서 정확한 위치를 지정해야 수정할 수 있습니다.

에서 직접 값을 대체하려면DataFrame을 사용합니다.inplace논쟁.

df.replace('columnvalue', np.NaN, inplace=True)

이 스니펫을 사용해 볼 수 있습니다.

[16]에서: mydata = {'x' : [10, 50, 18, 32, 47, 20], 'y' : ['12', '11', 'N/A', '13', '15', 'N/A']}[17]:df=pd.데이터 프레임(mydata)
[18]:df에서.y[df.y=="N/A"]=np.nan
아웃[19]:dfxy의0  10   121  50   112 18 NaN3  32   134  47   15520 NaN

또는 다음을 사용할 수 있습니다.

df = df.where(df != 'N/A')

또는

df = df.mask(df == 'N/A')

당신은 판다가 주는 이 방법을 사용할 수 있습니다.

df.fillna(0,inplace=True) 

첫 번째 매개 변수는 NA를 대체할 값입니다.

기본적으로 Pandas fillna 메서드는 새 데이터 프레임을 반환합니다.(기본적으로 inplace 매개변수는 inplace = False로 설정되어 있기 때문에 기본 동작입니다.)

제자리에 = True를 설정하면 메소드는 아무것도 반환하지 않고 대신 작동 중인 데이터 프레임을 직접 수정합니다.

언급URL : https://stackoverflow.com/questions/34794067/how-to-set-a-cell-to-nan-in-a-pandas-dataframe

반응형