如何正确在循环中集成函数批量处理CSV生成Plotly图表
问题根源
你的代码跑不通是三个明确的逻辑错误:
- 把函数定义写在了
for循环内部,每次迭代都会重复定义同名函数,属于完全无效的写法 - 整个循环块里只有函数定义,没有任何调用函数的代码,就算不报错也不会执行实际的数据处理
- Windows路径里的
\在Python字符串中是转义符,直接拼接容易触发路径解析异常,另外你没做输出文件夹存在性校验,容易触发路径不存在报错。
修正后可直接运行的代码
先确认你已经安装好pandas和plotly依赖,按如下结构调整即可:
import pandas as pd import plotly.express as px import os # 函数只需要在循环外定义一次 def transformcsv_toplot(cityname): # 用原始字符串读取CSV,避免反斜杠转义问题 df = pd.read_csv(rf'Input\{cityname}.csv', sep=";", index_col=[0]) df = df.sort_index() dff = df.unstack().reset_index() # 注意:unstack后会生成3列,你原来只给2个列名会触发长度不匹配报错,这里已修正 dff.columns = ['drop_col', 'datetime', 'category'] dff = dff.set_index('datetime') fig = px.scatter(dff, color='category') # 自动创建输出文件夹,不用手动新建Graph目录 os.makedirs('Graph', exist_ok=True) fig.write_html(f'Graph/{cityname}_monthlydata.html') print(f"处理完成:{cityname}") list_of_names = ['london', 'Liverpool', 'Paris'] # 循环内只做遍历传参调用即可 for city in list_of_names: transformcsv_toplot(city)
注意事项
- 检查
Input文件夹下的CSV文件名和列表里的名称完全匹配,注意大小写,比如列表里写Liverpool,对应的文件就应该是Liverpool.csv,不要写成liverpool.csv避免跨环境报错 - 如果你的
unstack()操作后的数据结构和预期不一致,自行调整dff.columns的列名对应关系即可,保证最终传给px.scatter的DataFrame存在category列就行。
内容的提问来源于stack exchange,提问作者user16511234
相关产品推荐
相关产品推荐

