如何在循环中借助迭代器动态调用多个DataFrame并绘图?
解决思路:用字典存储动态生成的DataFrame,避免exec和字符串变量名问题
你当前的写法无效,核心原因是给plotly传入的是字符串形式的变量名(比如"df_hour0['hour']"),而不是实际的DataFrame列数据(df_hour0['hour']这个Series对象),plotly无法通过字符串解析获取真实数据。
更合理的实现步骤:
1. 用字典存储所有小时的DataFrame(替代exec生成零散变量)
不要用exec生成df_hour0到df_hour23这些独立变量,改用字典统一存储,既整洁又方便循环调用:
N = 24 # 用字典推导式快速生成,key为小时数,value为对应小时的DataFrame hour_dfs = {i: df_m_a_meaned[df_m_a_meaned['hour'] == i] for i in range(N)}
如果习惯逐行循环写法,也可以这样写:
hour_dfs = {} for i in range(N): hour_dfs[i] = df_m_a_meaned[df_m_a_meaned['hour'] == i]
2. 循环字典生成图表
直接从字典中取出对应小时的DataFrame,传入plotly的Box组件:
import plotly.graph_objects as go fig = go.Figure(data=[ go.Box( x=hour_dfs[i]['hour'], y=hour_dfs[i]['priceNum'], name=f"小时 {i}" # 可选:给每个箱线图添加名称,让图例更清晰 ) for i in range(N) ]) fig.show()
额外提示:为什么不推荐用exec生成变量?
- 污染全局命名空间,变量过多后难以管理和排查问题
- 代码可读性差,后续维护成本高
- 容易出现语法错误,排查起来麻烦
内容的提问来源于stack exchange,提问作者wolliumm
相关产品推荐
相关产品推荐

