Pandas Замените NaN пустой/пустой строкой

У меня есть Pandas Dataframe, как показано ниже:

    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

Ответы

Ответ 1

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

Это может помочь. Он заменит все NaN пустой строкой.

Ответ 2

df = df.fillna('')

или просто

df.fillna('', inplace=True)

Это заполнит na (например, NaN) ''.

Если вы хотите заполнить один столбец, вы можете использовать:

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

Ответ 3

Если вы читаете фрейм данных из файла (например, 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('')

Ответ 4

Используйте форматтер, если вы хотите отформатировать его так, чтобы он хорошо отображался при печати. Просто используйте 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

Ответ 5

Если вы конвертируете DataFrame в JSON, NaN выдаст ошибку, поэтому в этом случае лучше всего заменить NaN на None.
Вот как:

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

Ответ 6

использование keep_default_na=False должно помочь вам:

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

Ответ 7

Я пробовал с одним столбцом строковых значений с помощью Nan.

Чтобы удалить нан и заполнить пустую строку:

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

Чтобы удалить nan и заполнить некоторые значения:

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

Я пробовал df.iloc также. но для этого нужен индекс столбца. поэтому вам нужно снова заглянуть в стол. просто вышеупомянутый метод сокращен на один шаг.

Ответ 8

Попробуйте это,

добавить inplace=True

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