@ave_code

Как решить проблему с could not convert string to float?

Входящие:
numpy==1.26.4
pandas==2.2.2

Есть вот такая таблица:
mpg cylinders displacement horsepower weight acceleration model_year origin name
18 8 307 130 3504 12 70 1 chevrolet chevelle malibu
15 8 350 165 3693 11.май 70 1 buick skylark 320
18 8 318 150 3436 11 70 1 plymouth satellite
16 8 304 150 3433 12 70 1 amc rebel sst
17 8 302 140 3449 10.май 70 1 ford torino
15 8 429 198 4341 10 70 1 ford galaxie 500
14 8 454 220 4354 9 70 1 chevrolet impala
14 8 440 215 4312 08.май 70 1 plymouth fury iii
14 8 455 225 4425 10 70 1 pontiac catalina
15 8 390 190 3850 08.май 70 1 amc ambassador dpl
15 8 383 170 3563 10 70 1 dodge challenger se
14 8 340 160 3609 8 70 1 plymouth 'cuda 340
15 8 400 150 3761 09.май 70 1 chevrolet monte carlo
14 8 455 225 3086 10 70 1 buick estate wagon (sw)

К ней применяю одну из этих функций:
print(df.replace('?',np.nan).astype(float).agg({'mpg': ['max', 'mean'], 'weight': ['mean', 'std']}))
print(df.groupby('model_year').agg({'mpg':['median','mean'],'weight':['mean','std']}))


В обоих случаях получаю ошибку:
ValueError: could not convert string to float: 'chevrolet chevelle malibu'

Никак не пойму в чём причина, особенно учитывая то, что я не обрабатываю ту колонку, а только числовые. Помогите плиз решить траблу.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
Что значит не обрабатываешь, вот
print(df.replace('?',np.nan).astype(float) Здесь во все фрейме делаешь замену а потом весь фрейм пытаешься привести к типу данных float.

Работай с "числовым подсетом датафрейма".
или заведи отдельную переменную приведи подсет к флоатам и потом группируй. Типа такого
df_ = df.loc[:,[nuimeric_column1,numrec_column2]] = df.loc[:,[nuimeric_column1,numrec_column2]].replace('?',np.NaN).astype(float)
и затем группируй и т.д.

Или хочешь чейнить, используй assign рассматривай все колонки по отдельности, при сложныех манипуляциях, которые требуют индивидулаьного подхода, к каждой колонке по отдельности так делают.
(
    df.assign(
        numeric1=lambda x: x['numeric1'].replace('?',np.NaN).astype(float),
        numeric2=lambda x: x['numeric2'].replace('?',np.NaN).astype(float)
    )
    .groupby('Category')
    .agg(['mean','median'])  
)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
А с чего ты взял, что ты обрабатываешь только колонки mpg и weight? astype(float) ты применяешь ко всему датасету.
Ты бы и сам догадался, если бы не пытался засунуть всю команду в однострочник - у тебя exception бы вылетел как раз на строке с astype().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы