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

pandas追加字典为DataFrame行时触发UnboundLocalError报错

报错根因
  • 这个UnboundLocalError: local variable 'user_df' referenced before assignment和追加操作本身无关,是Python作用域规则导致的:你大概率把这段逻辑写在了函数内部,且函数内存在对user_df的赋值语句,Python编译函数时会将整个作用域内赋值过的变量标记为局部变量,只要执行到追加行时user_df还没完成初始化(比如读csv的逻辑在某个没触发的分支里),就会抛出这个错误。
  • 额外提醒:pandas 2.0及以上版本已经完全移除了DataFrame.append()方法,就算解决了作用域问题,在新版本pandas环境下也会触发方法不存在的报错,不建议继续使用废弃的append写法。
可直接运行的修正方案

首先处理作用域问题:

  • 如果要在函数内操作全局的user_df,在函数开头加global user_df声明即可;如果是函数内局部变量,确保所有代码分支下,user_df在被引用前都完成了初始化赋值。

针对你「把字典作为新行添加到DataFrame」的核心需求,用官方推荐的pd.concat实现(兼容所有pandas版本,执行效率比旧append更高),不需要额外构造元组套列表的格式,直接写字典即可:

import pandas as pd

# 读取csv文件生成DataFrame
user_df = pd.read_csv('data/users.csv')

# 直接用字典构造新行数据
new_user_row = {
    'id': 1 if user_df.empty else int(user_df['id'].max()) + 1,
    'username': request.form['username'],
    'address': request.form.get('address'),
    'city': request.form.get('city'),
    'password': request.form.get('password'),
    'orders': [],
    'favorites': [],
    'balance': 0.0
}

# 拼接新行到原DataFrame,替换已废弃的append
user_df = pd.concat(
    [user_df, pd.DataFrame([new_user_row])],
    ignore_index=True
)

# 如果需要持久化到csv,追加完执行写入即可
# user_df.to_csv('data/users.csv', index=False)

小提示:上面id生成逻辑加了空表判断,避免users.csv是空文件时取max报错,比你原来的写法鲁棒性更好。

内容的提问来源于stack exchange,提问作者Flora Biletsiou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:36:15