如何修复 pandas:类型错误:没有要绘制的数字数据


使用 pandas 时可能遇到的错误是:

 TypeError : no numeric data to plot

当您尝试从 pandas DataFrame 绘制值,但没有要绘制的数值时,会发生此错误。

当您认为 DataFrame 中的某一列是数字,但实际上它是不同的数据类型时,通常会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们有以下 pandas DataFrame:

 import pandas as pd

#createDataFrame
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 rebound blocks
0 A 5 11 4
1 To 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
rebound 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
float64 points
rebounds float64
blocks float64
dtype:object

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注