如何修复 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:操作数无法与形状一起广播