developer tip

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

optionbox 2020. 10. 17. 10:24
반응형

Pandas 데이터 프레임에서 셀을 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

사용 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의 모든 인스턴스를 대체합니다.

Similarly, if you run into other types of unknown values such as empty string or None value:

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

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

Reference: Pandas Latest - Replace


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

This solve your problem. With the double [], you are working on a copy of the DataFrame. You have to specify exact location in one call to be able to modify it.


You can try these snippets.

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

In [18]:df.y[df.y=="N/A"]=np.nan

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

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

반응형