如何向已有Pandas DataFrame添加新数据?求concat外的替代方法
向已填充的DataFrame追加新列表数据的替代方法
场景说明
先创建空DataFrame并完成初始填充:
d = {'A': [], 'B': [], 'C': []} dataframe = pd.DataFrame(data=d)
通过列赋值完成第一批数据填充:
dataframe['A'] = some_list_1a dataframe['B'] = some_list_1b dataframe['C'] = some_list_1c
填充后DataFrame结构:
A B C ---------------- val1 val1 val1 val1 val1 val1 val1 val1 val1
现在需要追加第二批列表数据,但直接用dataframe['A'] = some_list_2a无法生效,期望得到的结果:
A B C ---------------- val1 val1 val1 val1 val1 val1 val1 val1 val1 val2 val2 val2 val2 val1 val2 val2 val2 val2
(val1为第一批列表值,val2为第二批列表值)
已知可通过创建第二个DataFrame并使用concat实现,以下是其他替代方法:
方法1:使用loc逐行追加(适合小批量数据)
通过获取当前DataFrame的行数,扩展索引后直接赋值:
current_row_count = len(dataframe) # 遍历新列表的每个元素,追加到末尾 for idx in range(len(some_list_2a)): dataframe.loc[current_row_count + idx] = [some_list_2a[idx], some_list_2b[idx], some_list_2c[idx]]
注意:数据量较大时,这种方法效率低于concat,因为每次loc赋值都会触发DataFrame的重新计算。
方法2:直接扩展列的底层列表(需注意数据类型限制)
如果DataFrame列的数据类型为object,可以直接调用列的extend方法追加新列表:
dataframe['A'].extend(some_list_2a) dataframe['B'].extend(some_list_2b) dataframe['C'].extend(some_list_2c) # 若索引出现混乱,重置索引 dataframe = dataframe.reset_index(drop=True)
局限性:仅适用于列存储的是可扩展的序列类型,若列是数值型等非object类型,此方法会报错。
方法3:用append追加(旧版本兼容方案)
在pandas 2.0之前的版本中,可以用append方法直接追加新构造的DataFrame:
new_data = pd.DataFrame({ 'A': some_list_2a, 'B': some_list_2b, 'C': some_list_2c }) dataframe = dataframe.append(new_data, ignore_index=True)
注意:pandas 2.0及以上版本已弃用append,官方推荐使用concat,所以不建议在新项目中使用此方法。
内容的提问来源于stack exchange,提问作者suziex
相关产品推荐
相关产品推荐

