如何将字典行追加到空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
相关产品推荐
相关产品推荐

