Решение проблемы AttributeError: объект ‘float’ не имеет атрибута ‘rint’


Проблема

В последнее время я работаю над некоторыми ETL проектами и на этапе трансформации столкнулся с ошибкой "AttributeError: 'float' object has no attribute 'rint'", в сочетании с "TypeError: loop of ufunc does not support argument 0 of type float which has no callable rint method".

Объяснение

Это заняло некоторое время, но стало очевидно, что, поскольку я получаю/извлекаю данные из многих источников (CSV, JSON или XML), похожие столбцы могут иметь смешанный тип данных (т.е. столбец может иметь тип данных string и int), и прежде чем я смогу перейти к этапу преобразования, мне нужно, чтобы этот столбец имел определенный тип данных, особенно если я хочу выполнить другие задачи с ним (что я и пытался сделать и постоянно сталкивался с ошибками).

Решение

Чтобы преобразовать столбец со смешанным типом данных, необходимо привести его к определенному типу данных, с которым вы собираетесь работать.

Этого можно добиться с помощью функции pandas.DataFrame.astype, как показано ниже.

import pandas as pd

# an example of extracted data
extracted_data = pd.DataFrame({
    'Brand': ['Gucci', 'Nike', 'Adidas', 'Hermes', 'Zara'],
    'year_of_manufacture': [2010, 1999, '2012', 2011, '2008'], # mixed data type
    'price': ['4034.203', 5000.00, '7450.17567', 3023.004, '4901.32345'] # mixed data type
})

# cast specific columns to a desired data type
cast_to_type = {
    'year_of_manufacture': int,
    'price': float
    }
extracted_data = extracted_data.astype(cast_to_type)

# do the transfrom
extracted_data['price'] = extracted_data['price'].round(2)

print(extracted_data)

Вход в полноэкранный режим Выход из полноэкранного режима

Для дальнейшего чтения

  1. Функция pandas.DataFrame.astype
  2. Другие способы приведения смешанного типа данных в списке к определенному типу данных

Обложка Фотография Вардана Папикяна на Unsplash

Оцените статью
devanswers.ru
Добавить комментарий