Pandas 데이터 프레임에서 None을 NaN으로 바꿉니다.


101

나는 테이블이있다 x:

        website
0   http://www.google.com/
1   http://www.yahoo.com
2   None

python None을 pandas NaN으로 바꾸고 싶습니다. 나는 시도했다 :

x.replace(to_replace=None, value=np.nan)

그러나 나는 얻었다 :

TypeError: 'regex' must be a string or a compiled regular expression or a list or dict of strings or regular expressions, you passed a 'bool'

어떻게해야합니까?

답변:


148

DataFrame.fillna또는 문자열이 아닌 Series.fillnaPython 객체를 대체 할 수 있습니다 .None'None'

import pandas as pd
import numpy as np

데이터 프레임의 경우 :

df = df.fillna(value=np.nan)

열 또는 시리즈의 경우 :

df.mycol.fillna(value=np.nan, inplace=True)

3
SQL 데이터베이스에서 데이터를 가져온 경우이를 아래 답변과 결합 할 수 있습니다. 이것은 None (문자열이 아님)을 NaN으로 변환합니다. 그런 다음 df['column'].replace(nan, "", inplace=True)None을 빈 문자열로 원한다고 말할 수 있습니다.
VISQL

1
이것은 대답이 나를 위해 작동하지 않습니다. 그것은 대체하지 않습니다 None. Max의 대답이 작동합니다.
다니엘

이 컬럼 별 솔루션이 가장 효과적이라는 것을 알았습니다 df['website'].replace(pd.np.nan, 0, inplace=True).. 또한 Pandas의 내장 참조에 의존하여 Numpy를 포함 할 필요가 없습니다.
CodeMantle

2
pd.np.nan이제 제공합니다 FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead.
Alex Povel

17

또 다른 옵션이 있습니다.

df.replace(to_replace=[None], value=np.nan, inplace=True)

3
df.replace ([None], np.nan, inplace = True)를 실행할 때 데이터가 누락 된 모든 datetime 개체가 개체 dtypes로 변경되었습니다. 따라서 데이터 크기에 따라 부담이 될 수있는 datetime으로 다시 변경하지 않는 한 쿼리가 손상되었을 수 있습니다.
Doubledown 2010 년

15

다음 줄은 다음으로 대체 None됩니다 NaN.

df['column'].replace('None', np.nan, inplace=True)

두 번 확인하면 효과가 있습니다. 오류가 발생하거나 '없음'값이 대체되지 않습니까?
Max Izadi 2018

주의 :이 방법은 nan 열에 대한 pandas의 기본 dtype과 반대로 np.nanfloat dtype (예 float64:)을 갖는를 사용 object합니다.
tehfink

6
주의 : 이것은 문자열을 "None"텍스트로 바꾸지 만 명시적인 None 값은 바꾸지 않습니다 ( 상수에서와 같이 None ).
그레고르 Müllegger

4

df.replace ([None], np.nan, inplace = True)를 사용하면 누락 된 데이터가있는 모든 datetime 개체가 개체 dtypes로 변경되었습니다. 따라서 데이터 크기에 따라 부담이 될 수있는 datetime으로 다시 변경하지 않는 한 쿼리가 손상되었을 수 있습니다.

이 방법을 사용하려면 먼저 df에서 객체 dtype 필드를 식별 한 다음 None을 대체 할 수 있습니다.

obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)

0
DataFrame['Col_name'].replace("None", np.nan, inplace=True)

1
안녕하세요, stackoverflow에 오신 것을 환영합니다. 답변 해 주셔서 감사합니다. 이 코드가 질문에 답할 수 있지만 문제가 무엇인지, 어떻게 해결했는지에 대한 설명을 추가 할 수 있습니까? 이것은 미래의 독자가 귀하의 답변을 더 잘 이해하고 그로부터 배우는 데 도움이 될 것입니다.
Plutian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.