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

Jupyter Notebook中DataFrame追加操作失败问题求助

问题解决:DataFrame追加后为空的问题

问题原因

pandas的append()方法不会原地修改原DataFrame,而是返回一个包含追加后数据的新DataFrame。你的函数仅调用了df_a.append(...),但没有将返回结果重新赋值给df_a;同时函数内部默认不会修改外部定义的df_a,导致原DataFrame始终为空。

解决方案

这里提供两种可行的修改方式,同时补充pandas新版本的替代方案:

方案1:让函数返回新的DataFrame,调用时重新赋值

def writeToTable(df_a, df_b):
    return df_a.append(df_b, ignore_index=True)

# 调用函数时更新df_a
df_a = writeToTable(df_a, df_loop)

方案2:在函数内部声明全局变量,直接修改原DataFrame

def writeToTable(df_b):
    global df_a
    df_a = df_a.append(df_b, ignore_index=True)

# 直接调用即可更新df_a
writeToTable(df_loop)

推荐:使用pd.concat()替代已弃用的append()

pandas 2.0及以上版本已弃用append()方法,更推荐使用pd.concat(),用法如下:

# 对应方案1的写法
def writeToTable(df_a, df_b):
    return pd.concat([df_a, df_b], ignore_index=True)

df_a = writeToTable(df_a, df_loop)

# 对应方案2的写法
def writeToTable(df_b):
    global df_a
    df_a = pd.concat([df_a, df_b], ignore_index=True)

优化建议(循环追加场景)

如果是在循环中多次追加数据,多次创建新DataFrame会影响性能。建议先将所有待追加的小DataFrame存入列表,最后一次性合并:

df_list = []
# 循环生成待追加的df_loop
for ...:
    df_loop = ...  # 生成你的小DataFrame
    df_list.append(df_loop)

# 一次性合并到df_a
df_a = pd.concat([df_a] + df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:15:02