답변:
@bogatron이 맞습니다.를 사용할 수 있습니다 where
. pandas에서 기본적으로이 작업을 수행 할 수 있다는 점은 주목할 가치가 있습니다.
df1 = df.where(pd.notnull(df), None)
참고 :이의 DTYPE 변경 모든 열 을을 object
.
예:
In [1]: df = pd.DataFrame([1, np.nan])
In [2]: df
Out[2]:
0
0 1
1 NaN
In [3]: df1 = df.where(pd.notnull(df), None)
In [4]: df1
Out[4]:
0
0 1
1 None
참고 : dtype
모든 데이터 유형을 허용하도록 DataFrames 를 다시 캐스팅 할 수없는 작업은 astype
다음과 같습니다 fillna
.
df1 = df.astype(object).replace(np.nan, 'None')
불행히도 이것도 사용하지도 (종료 된) 문제replace
를 None
볼 수 없습니다 .
제쳐두고, 대부분의 사용 사례에서 NaN을 None으로 바꿀 필요가 없다는 점에 주목할 가치가 있습니다 . 판다에서 NaN과 None의 차이점 에 대한이 질문을 참조하십시오. .
그러나이 특정 경우에는 (적어도이 답변 당시) 그렇게 보입니다.
np.nan
문자열로 변환되는 것을 피하기 위해 Django로 삽입하기 전에 사용하는 것이 유용 합니다"nan"
dtype
의 object
그 위해 그것을 할 필요에 따라 다르게 다른 종류의 처리. 이상적으로 fillna(None)
는 훌륭 할 것입니다.
df = df.replace({np.nan: None})
이 Github 문제 에 대한 크레딧은이 사람에게갑니다 .
df.replace({np.nan: None})
임시 객체로 사용할 수있는 최상의 답변입니다
@Andy Hayden의 답변에 추가 :
DataFrame.mask
는의 반대 쌍둥이 이므로 DataFrame.where
정확히 동일한 서명을 갖지만 의미는 반대입니다.
DataFrame.where
조건이 False 인 값 바꾸기에 유용합니다 . DataFrame.mask
조건이 True 인 값 바꾸기에 사용됩니다 .따라서이 질문에서 사용하는 df.mask(df.isna(), other=None, inplace=True)
것이 더 직관적 일 수 있습니다.
또 다른 추가 : 배수를 바꾸고 열 유형을 object 에서 float로 다시 변환 할 때주의하십시오 . 당신이 당신의 것이 를 사용하여 @ andy-hayden의 제안을 적용하는 것으로 None
돌아 가지 않을 것이라는 것을 확신하고 싶다면 . 교체가 여전히 '잘못'될 수있는 방법에 대한 그림 :np.NaN
pd.where
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: df = pd.DataFrame({"a": [1, np.NAN, np.inf]})
In [4]: df
Out[4]:
a
0 1.0
1 NaN
2 inf
In [5]: df.replace({np.NAN: None})
Out[5]:
a
0 1
1 None
2 inf
In [6]: df.replace({np.NAN: None, np.inf: None})
Out[6]:
a
0 1.0
1 NaN
2 NaN
In [7]: df.where((pd.notnull(df)), None).replace({np.inf: None})
Out[7]:
a
0 1.0
1 NaN
2 NaN
.replace({np.nan: None})
replace({np.nan: None})
. 내 의견은의 교체시 잠재적 인 함정을 지적하기 위해 추가되었습니다 np.nan
. 위의 내용은 확실히 나를 약간 넘어 뜨 렸습니다!
None
위해NULL
대신은nan
?