팬더 NaN을 공백 / 빈 문자열로 바꿉니다.


218

아래와 같이 팬더 데이터 프레임이 있습니다.

    1    2       3
 0  a  NaN    read
 1  b    l  unread
 2  c  NaN    read

빈 문자열로 NaN 값을 제거하여 다음과 같이 나타납니다.

    1    2       3
 0  a   ""    read
 1  b    l  unread
 2  c   ""    read

답변:


261
import numpy as np
df1 = df.replace(np.nan, '', regex=True)

도움이 될 수 있습니다. 모든 NaN을 빈 문자열로 바꿉니다.


1
어떤 도서관 np.nan에서 왔습니까? 나는 그것을 사용할 수 없습니다
CaffeineConnoisseur

8
@CaffeineConnoisseur : import numpy as np.
존 즈 빙크

26
@CaffeineConnoisseur-또는 pd.np.nan원치 않는 경우 import numpy.
elPastor

1
또한 Dict를 .csv 행에 문자열로 저장 한 다음pd.DataFrame.from_dict(eval(_string_))
yeliabsalohcin

5
... inplace=True옵션 을 언급하는 것도 유용합니다 .
smci

342
df = df.fillna('')

아니면 그냥

df.fillna('', inplace=True)

이것은 na (예 : NaN)를로 채 웁니다 ''.

단일 열을 채우려면 다음을 사용할 수 있습니다.

df.column1 = df.column1.fillna('')

df['column1']대신에 사용할 수 있습니다 df.column1.


5
@Mithril -df[['column1','column2']] = df[['column1','column2']].fillna('')
elPastor

99

파일에서 데이터 프레임을 읽는 경우 (예 : CSV 또는 Excel) 다음을 사용하십시오.

  • df.read_csv(path , na_filter=False)
  • df.read_excel(path , na_filter=False)

이것은 빈 필드를 빈 문자열로 자동 고려합니다. ''


이미 데이터 프레임이있는 경우

  • df = df.replace(np.nan, '', regex=True)
  • df = df.fillna('')

na_filter는) (read_excel 사용할 수 없습니다 pandas.pydata.org/pandas-docs/stable/...
마조리 로스웰

내 응용 프로그램에서 사용했습니다. 그것은 존재하지만 어떤 이유로 든, 그들은 문서 에서이 논쟁을주지 않았습니다. 오류없이 작동합니다.
Natesh bhat 17 :

작동합니다. 파싱에 사용하고 있습니다xl.parse('sheet_name', na_filter=False)
Dmitrii

5

인쇄 할 때 잘 렌더링되도록 형식을 지정하려는 경우 포맷터를 사용하십시오 . df.to_string(... formatters불필요하게 DataFrame을 수정하거나 메모리를 낭비하지 않고을 사용하여 사용자 지정 문자열 형식을 정의하십시오.

df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [np.nan, 1, np.nan],
    'C': ['read', 'unread', 'read']})
print df.to_string(
    formatters={'B': lambda x: '' if pd.isnull(x) else '{:.0f}'.format(x)})

얻을 :

   A B       C
0  a      read
1  b 1  unread
2  c      read

4
print df.fillna('')자체적으로 (하지 않고 df = df.fillna('')) 원본도 수정하지 않습니다. 사용하는 데 속도 나 다른 이점이 to_string있습니까?
환상의

충분히 공정하다 df.fillna('')!
Steve Schulist

@shadowtalker : OP가 df를 하나의 형식으로 유지하고 싶을 때 (예 : 계산 효율이 높거나 불필요한 / 빈 / 중복 문자열에 메모리 절약) 원하는 경우에만 정답 일 것입니다. 기분 좋은 방법. 유스 케이스에 대해 더 많이 알지 못하면 확실하게 말할 수 없습니다.
smci

2

이 시도,

더하다 inplace=True

import numpy as np
df.replace(np.NaN, ' ', inplace=True)

1

를 사용 keep_default_na=False 하면 도움이 될 것입니다.

df = pd.read_csv(filename, keep_default_na=False)

0

DataFrame을 JSON으로 변환하는 경우 NaN오류가 발생 하므로이 사용 사례에서로 대체 NaN하는 것이 가장 좋습니다 None.
방법은 다음과 같습니다.

df1 = df.where((pd.notnull(df)), None)

0

nan을 사용하여 하나의 문자열 값 열로 시도했습니다.

nan을 제거하고 빈 문자열을 채우려면

df.columnname.replace(np.nan,'',regex = True)

nan을 제거하고 일부 값을 채우려면

df.columnname.replace(np.nan,'value',regex = True)

df.iloc도 시도했습니다. 그러나 열의 색인이 필요합니다. 테이블을 다시 살펴 봐야합니다. 단순히 위의 방법으로 한 단계 만 줄였습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.