Как исправить в Pandas: TypeError: нет числовых данных для построения

Как исправить в Pandas: TypeError: нет числовых данных для построения

Одна ошибка, с которой вы можете столкнуться при использовании pandas:

TypeError : no numeric data to plot

Эта ошибка возникает, когда вы пытаетесь вывести значения из кадра данных pandas, но нет числовых значений для построения.

Эта ошибка обычно возникает, когда вы думаете, что определенный столбец в DataFrame является числовым, но оказывается, что это другой тип данных.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'B'],
 'points': ['5', '7', '7', '9', '12'],
 'rebounds': ['11', '8', '10', '6', '6'],
 'blocks': ['4', '7', '7', '6', '5']})

#view DataFrame
df

 team points rebounds blocks
0 A 5 11 4
1 A 7 8 7
2 B 7 10 7
3 B 9 6 6
4 B 12 6 5

Теперь предположим, что мы пытаемся построить линейный график для трех переменных, которые, по нашему мнению, являются числовыми: очки, подборы и блоки:

#attempt to create line plot for points, rebounds, and blocks
df[['points', 'rebounds', 'blocks']].plot()

ValueError : no numeric data to plot

Мы получаем ошибку, потому что ни один из этих столбцов на самом деле не является числовым.

Как исправить ошибку

Мы можем использовать функцию dtypes , чтобы увидеть, какой тип данных имеет каждый столбец в нашем DataFrame:

#display data type of each column in DataFrame
df.dtypes

team object
points object
rebounds object
blocks object
dtype: object

Мы видим, что ни один из столбцов в DataFrame не является числовым.

Мы можем использовать функцию .astype() для преобразования определенных столбцов в числовые:

#convert points, rebounds, and blocks columns to numeric
df['points']=df['points'].astype (float)
df['rebounds']=df['rebounds'].astype (float)
df['blocks']=df['blocks'].astype (float)

Затем мы можем снова использовать функцию plot() :

#create line plot for points, rebounds, and blocks
df[['points', 'rebounds', 'blocks']].plot() 

Мы можем успешно построить линейный график для очков, подборов и блоков, потому что каждая переменная теперь является числовой.

Мы можем убедиться в этом, снова воспользовавшись функцией dtypes :

#display data type of each column in DataFrame
df.dtypes

team object
points float64
rebounds float64
blocks float64
dtype: object

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.