Замените нечисловое значение пандами, не работающими для всех

Я хочу прочитать значения из csv с помощью Pandas. У меня есть такие столбцы с плавающей запятой в test.csv

a;b;c
1.4;2.4;-
2.3;4.9;3.8
3.1;5.3;2.7
6.6;-;-
9.6;n/a;3.8
2.3;3.4;6.3
1.4;6.5;-
3.8;-;2.0

Я хочу, чтобы не-числа были 0.0. я попробую

import numpy as np
import pandas as pd

df = pd.read_csv(
    'test.csv',
    sep=';',
    encoding='utf-8'
)

df = df.replace(['-','NaN'], '0')
df.astype('float64')

но осталось одно значение NaN

     a    b    c
0  1.4  2.4    0
1  2.3  4.9  3.8
2  3.1  5.3  2.7
3  6.6    0    0
4  9.6  NaN  3.8
5  2.3  3.4  6.3
6  1.4  6.5    0
7  3.8    0  2.0

Как я могу это исправить?

Удалите вызов замены и вместо этого добавьте следующий аргумент в read_csv: na_values=['-', 'n/a']

cs95 21.12.2020 00:52

@ cs95 Само по себе это не поможет, он также хочет заменить NaNs нулевыми значениями.

buddemat 21.12.2020 14:24
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это более простым способом. Вы можете добавить - в качестве дополнительного значения NaN при вызове read_csv. Затем замените все значения NaN на fillna():

import pandas as pd

df = pd.read_csv('test.csv', sep=';', encoding='utf-8', na_values=['-'])
df = df.fillna(0.0)

Это дает вам то, что вы хотите, прямо с правильным dtypes.


К вашему сведению: если вы хотите исправить свой код, вам придется изменить оператор replace:

df = df.replace(['-', np.nan], '0.0')

Вы упустили тот факт, что у него есть два типа NaN, '-' и 'n/a'. Вы должны добавить оба в na_values

sunnytown 21.12.2020 00:54

На самом деле, вы не знаете. 'n/a' уже является частью стандартных значений, которые заменены на NaN.

buddemat 21.12.2020 00:56

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