Python for循环绘图无输出及pandas DataFrame KeyError问题求助
问题1:第一段代码绘图不显示的解决方法
- 核心错误是
range()函数用法错误:Python的range()仅支持最多3个参数(起始值, 结束值, 步长),你写的range(1,2,3,4,5)属于语法错误,内层循环根本不会执行,自然没有图生成。
如果你要遍历test取1到5的整数,正确写法是range(1,6)(结束值要写6,因为range是左闭右开区间) - 其他需要检查的点:
- 确认
DATA_END_VALUES、F0两个变量已经在函数作用域内定义,或者作为参数传入函数,否则会触发变量未定义的报错 - 如果是在Jupyter Notebook环境运行,代码开头要加一行
%matplotlib inline保证绘图正常显示 - 运行代码时优先查看控制台的报错信息,能快速定位问题
修正后的第一段函数参考:
- 确认
proef_numbers = [1,2,3,4,5] # 假设DATA_END_VALUES、F0已经提前定义 def plot_results(df, proef_numbers, title): for proef in proef_numbers: # 改对range的写法 for test in range(1,6): S_data = df[f"S_{proef}_{test}"][1:DATA_END_VALUES[proef-1][test-1]] F_data = df[f"F_{proef}_{test}"][1:DATA_END_VALUES[proef-1][test-1]]-F0 plt.plot(S_data, F_data, label=f"Proef {proef} test {test}" ) plt.xlabel('Time [s]') plt.ylabel('Force [N]') plt.title(f"Proef {proef}, test {test}") plt.legend() plt.show()
问题2:KeyError:1报错的解决方法
- 报错原因:Pandas的DataFrame直接用
df[数字]是按列名匹配,不是按列的位置取值。你的df列名不是整数1,所以找不到对应的列就报KeyError。 - 如果你要按列的位置(第1列、第2列……)取数,要用
iloc属性,语法是df.iloc[行范围, 列索引],取整列的话行范围写:即可,同时注意Pandas的索引是从0开始计数的。
你要循环绘制16张图,对应取第i列和第i+16列的话,修正后的代码如下:
# 列索引从0开始,所以取0到15对应前16列,和16到31的后16列配对 for i in range(0,16): # 取第i列所有行,和第i+16列所有行 plt.plot(df.iloc[:,i], df.iloc[:,i+16]) plt.show()
如果你确认你的列名是字符串格式的数字(比如列名是"1","2"…"32"),那也可以写成df[str(i)]来匹配列名。
内容的提问来源于stack exchange,提问作者Lodewijk Pleij
相关产品推荐
相关产品推荐

