Преобразование pandas.Series из типа object в float с заменой ошибок на NaN
Описание проблемы:
Я столкнулся с проблемой при работе с библиотекой pandas в Python. У меня есть следующий код:
In [2]: a = pd.Series([1, 2, 3, 4, '.'])
In [3]: a
Out[3]:
0 1
1 2
2 3
3 4
4 .
dtype: object
Я пытаюсь преобразовать элементы серии a
в тип float64
с использованием метода astype()
, но мне нужно, чтобы значения, которые не могут быть преобразованы (например, строка '.'
), заменялись на NaN
. Я использую следующий код для этого:
In [8]: a.astype('float64', raise_on_error=False)
Out[8]:
0 1
1 2
2 3
3 4
4 .
dtype: object
К сожалению, результат не соответствует моим ожиданиям: метод astype()
не преобразует ошибочные значения в NaN
, а просто оставляет их как есть. Я ожидал, что будет опция, позволяющая выполнить преобразование с заменой ошибочных значений на NaN
.
Есть ли способ добиться такого поведения в pandas? Ваши советы и рекомендации будут очень полезны!
1 ответ(ов)
В вашем коде вы пытаетесь использовать метод convert_objects()
для преобразования элементов в числовой формат. Однако стоит отметить, что данный метод устарел и его не рекомендуется использовать. Вместо этого вы можете применить метод pd.to_numeric()
, чтобы получить желаемый результат.
Вот пример, как это можно сделать:
import pandas as pd
# Создаем серию
s = pd.Series([1, 2, 3, 4, '.'])
# Преобразуем элементы в числовой формат, игнорируя ошибки
result = pd.to_numeric(s, errors='coerce')
print(result)
Этот код выдаст следующий результат:
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
dtype: float64
Как видите, строка '.'
не может быть преобразована в число и становится NaN
, что соответствует приведенному вами выводу.
Как удалить строки DataFrame в Pandas с NaN в определённом столбце
Установить значение для конкретной ячейки в DataFrame pandas с использованием индекса
Как изменить порядок столбцов в DataFrame?
Выбор строки из pandas Series/DataFrame по целочисленному индексу
Получить все ключи из объекта GroupBy в Pandas