판다 데이터 프레임에서 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
'programing' 카테고리의 다른 글
고급 사용자 지정 필드 / 다른 acf 필드를 기준으로 채우기 선택 (0) | 2023.07.15 |
---|---|
vuetify 데이터 테이블 및 json 개체에서 가져온 바인딩 데이터 (0) | 2023.07.15 |
Android에서 앱 언어를 프로그래밍 방식으로 변경 (0) | 2023.07.10 |
SQL Server 2005 쿼리를 CSV로 내보내는 방법 (0) | 2023.07.10 |
사용자 정의 로그인 양식.JSON 응답을 가져오도록 Spring 보안 구성 (0) | 2023.07.10 |