绘制earnings与education散点图及OLS回归时出现“标识符含无效字符”报错求助
问题排查与修正方案
嘿,我帮你找到了触发“invalid character in identifier”错误的核心原因,还有几个语法小问题,咱们一步步来解决:
1. 核心错误分析
你的代码里有两个关键问题直接导致了报错:
- 中文标点问题:公式参数里用了中文单引号(
’education~earnings),Python只认英文的单引号(')或双引号("),中文引号会被当成无效字符,这就是报错的根源。 - 函数调用语法错误:
smf.ols()的括号位置不对,formula的引号没闭合,而且data=mydata应该放在函数的括号里面,原代码把括号写在了data=mydata后面,导致整个函数调用的结构混乱。
2. 修正后的完整代码
我把所有问题都修正了,还加了点小优化让代码更简洁:
import statsmodels.formula.api as smf import matplotlib.pyplot as plt # 先确保mydata已经正确加载(比如用pandas.read_csv加载你的数据源文件) mod = smf.ols(formula='education ~ earnings', data=mydata) # 修正了引号和括号位置 res = mod.fit() print(res.summary()) # 用print包裹,确保在脚本环境也能正常显示回归结果 beta = res.params # 绘制散点图和拟合线 plt.scatter(mydata["education"], mydata["earnings"], color="black") plt.plot(mydata["education"], res.fittedvalues, "r") plt.ylabel("earnings") plt.xlabel("education") plt.title("Scatterplot earnings versus education") plt.show()
3. 额外小贴士
- 导入
matplotlib.pyplot时用别名plt是Python社区的通用做法,能减少重复代码。 - 如果你之前绘图也报错,大概率也是标点或者变量名的问题,现在用修正后的代码应该能正常运行了。
- 记得确认
mydata是正确加载的Pandas DataFrame,比如通过pd.read_csv("你的数据源路径")加载,不然即使语法对了,也会因为数据问题报错。
内容的提问来源于stack exchange,提问作者Nesrine Tiar
相关产品推荐
相关产品推荐

