TypeError: expected 1D vector for x 散点图正常但趋势线生成失败如何解决
报错原因
np.polyfit() 要求输入的x、y参数均为一维向量,你当前代码中的x、y是二维单列DataFrame结构,因此触发类型错误。plt.scatter() 对二维单列输入有兼容性处理,所以散点图可以正常生成。
修复方法
你只需要将读取到的单列DataFrame转为一维结构即可,有两种常用实现方式:
- 读取Excel时调用
squeeze()方法,直接将单列DataFrame转为一维Series - 读取后通过
values.flatten()转为一维numpy数组
修改后可运行代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取时直接转一维结构 x = pd.read_excel("Slider.xlsx", sheet_name="K", skiprows=2, usecols="E").squeeze() y = pd.read_excel("Slider.xlsx", sheet_name="K", skiprows=2, usecols="F").squeeze() plt.scatter(x, y) # 此时x、y均为一维结构,可正常传入polyfit z = np.polyfit(x, y, 1) p = np.poly1d(z) plt.plot(x, p(x), "r--") plt.show()
如果squeeze()方法不生效,可以替换为如下写法实现转一维:
x = pd.read_excel("Slider.xlsx", sheet_name="K", skiprows=2, usecols="E").values.flatten() y = pd.read_excel("Slider.xlsx", sheet_name="K", skiprows=2, usecols="F").values.flatten()
内容的提问来源于stack exchange,提问作者karthik.B.K
相关产品推荐
相关产品推荐

