You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确在循环中集成函数批量处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:15:52