판다 데이터 프레임에서 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 |