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

如何将字典行追加到空Pandas DataFrame?append后数据为空问题

问题原因与解决方案

核心问题

Pandas的append()方法不会原地修改原DataFrame,它会返回一个包含追加后内容的新DataFrame。你当前的代码只是调用了append()但没有把返回的结果重新赋值给df1或df2,所以原来的空DataFrame根本没被更新。另外注意Python里布尔值是大写的True,不是小写的true,这可能也是条件判断的潜在问题。

修复方案1:修正循环赋值

把append()的结果重新赋值给df1/df2:

import pandas as pd

# df是输入DataFrame
df1 = pd.DataFrame(columns=df.columns)
df2 = pd.DataFrame(columns=df.columns)

df_dict = df.to_dict('records')
for row in df_dict:
    # 替换为你的实际判断条件,注意用大写True
    if condition1:
        df1 = df1.append(row, ignore_index=True)
    else:
        df2 = df2.append(row, ignore_index=True)

修复方案2:更高效的布尔索引(推荐)

循环遍历每行的效率极低,尤其是数据量大时。直接用Pandas布尔索引筛选行,性能提升明显:

import pandas as pd

# 替换condition1为你的实际判断逻辑,比如df['列名'] > 10
df1 = df[condition1].copy()
df2 = df[~condition1].copy()

这里~表示取反,不满足条件的行会被分到df2中。如果你的条件是针对行级的复杂判断,可以先将其转换为DataFrame的布尔列:

# 示例:判断每行的'a'列值大于10
condition = df['a'] > 10
df1 = df[condition].copy()
df2 = df[~condition].copy()

补充说明

从Pandas 2.0开始,append()方法已被标记为废弃,官方推荐用pd.concat()替代。如果必须用循环方式,建议先收集数据到列表再批量生成DataFrame,减少重复创建对象的开销:

list1 = []
list2 = []
for row in df_dict:
    if condition1:
        list1.append(row)
    else:
        list2.append(row)
df1 = pd.DataFrame(list1, columns=df.columns)
df2 = pd.DataFrame(list2, columns=df.columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:27:19