Df.replace() не может заменить строки nan во фрейме данных

data считывает информацию из текстового файла и включает в себя некоторые значения nan. Я пытаюсь заменить все nan нулями, используя data.replace('nan', 0). Но значения nan в ряду найти невозможно.

file = 'RAO.txt'
data = pd.read_csv(file, sep = "\t", header=None, skiprows=1)
data = data.drop(data.columns[-1], axis=1)
print(data)
print(type(data.iloc[0, 2]))
data.replace('nan', 0, inplace=True)
print(data)

Вывод приведенного выше кода:

Как показано, nan все еще существует в data после запуска кода. кто-нибудь знает, как решить эту проблему? Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
92
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если Nan действительно присутствует, похоже, что данных слишком много, и значение «True» не отображается. Вы можете проверить, сколько Nan, с помощью print(data.isnull().sum())

1. Измените исходный объект: вместо:

По умолчанию fillna(), ffill() и bfill() возвращают новый объект, не изменяя исходный. Установка аргумента inplace в значение True изменяет исходный объект.

df.fillna(0, inplace=True)

2. Замените строку nan значением:

df.replace('nan', 0, inplace=True)

Полный пример:

import pandas as pd
import numpy as np

df = pd.DataFrame({'colA':[0.6, "nan", "0.04+0.0j", np.nan],
                   'colB':[np.nan, "0.04+0.0j", 6, "nan"]})

df.fillna(0, inplace=True)
df.replace('nan', 0, inplace=True)

Исходный фрейм данных:

колА colB 0,6 Нэн Нэн 0,04+0,0дж 0,04+0,0дж 6 Нэн Нэн

Кадр данных после fillna и replace:

колА colB 0,6 0 0 0,04+0,0дж 0,04+0,0дж 6 0 0
Ответ принят как подходящий

Поскольку isnull() не идентифицирует ячейки как NaN, возможно, то, что вы видите как nan, на самом деле является строкой 'nan'.

Пожалуйста, проверьте это, набрав print(type(data.iloc[0, 2])) и print(data.iloc[0, 2]).

  • Если он имеет строковый тип, вы можете заменить его на df.replace('nan', 0, inplace=True).
  • Если это номер типа, вы можете заменить его на df.fillna(0, inplace=True).

Обязательно используйте inplace=True, чтобы изменения вносились непосредственно в оригинал DataFrame.

Спасибо! Как вы сказали, nan — это строка, но ее нельзя заменить на 0 на data.replace('nan', 0, inplace=True). Я добавляю вывод в этот вопрос.

WUYing 27.04.2024 13:56

@WUYing Похоже, вокруг строк «nan» могут быть пробелы в начале или в конце. Чтобы убедиться в этом, вы можете напечатать конкретное значение с добавленными кавычками, чтобы четко видеть пробелы: print(f"'{data.iloc[0, 2]}'")

DataJanitor 29.04.2024 11:20

Другие вопросы по теме