pandas DataFrame调用append方法无法追加数据如何解决
问题原因
你的代码运行后final_df为空,核心原因是 pandas 中DataFrame.append()不是原地操作方法:该方法不会修改调用它的原DataFrame,而是返回拼接完成后的新DataFrame对象。你之前的代码只调用了append(),但没有接收返回值,所以初始化的空final_df始终没有被修改。
另外补充:pandas 从1.4.0版本开始已经将append()方法标记为弃用,后续版本会直接移除该方法,官方更推荐使用pd.concat()实现DataFrame拼接,尤其是批量拼接场景下性能更好。
修复方案
方案1:基于原append写法修正
每次调用append()后,将返回的新DataFrame重新赋值给final_df即可,修正后代码如下:
import pandas as pd def my_fun(var): # 函数内无需重复导入pandas,顶部导入后全局可用 temp={"File_Exist":'no',"desc":var,"Bucket":'bucket',"name":'fadsf',"size":'','last_modified':'',"generation":''} temp_df=pd.DataFrame(temp,columns=list(temp.keys()), index=['x']) return temp_df final_df=pd.DataFrame() data_df=my_fun('my 1st file') # 接收append返回的新对象,赋值回final_df final_df = final_df.append(data_df,ignore_index = True) data_df=my_fun('my 2nd file') final_df = final_df.append(data_df,ignore_index = True) print(final_df)
方案2:推荐写法(使用pd.concat,兼容新版pandas)
更推荐先把所有待拼接的DataFrame存入列表,最后调用pd.concat()一次性完成拼接,避免逐次生成新对象带来的性能损耗,代码如下:
import pandas as pd def my_fun(var): temp={"File_Exist":'no',"desc":var,"Bucket":'bucket',"name":'fadsf',"size":'','last_modified':'',"generation":''} temp_df=pd.DataFrame(temp,columns=list(temp.keys()), index=['x']) return temp_df # 用列表收集所有需要拼接的DataFrame df_container = [] df_container.append(my_fun('my 1st file')) df_container.append(my_fun('my 2nd file')) # 一次性完成拼接 final_df = pd.concat(df_container, ignore_index=True) print(final_df)
运行上述任意一段修正后的代码,都能得到包含两条追加数据的final_df。
内容的提问来源于stack exchange,提问作者Yugdhurandhar
相关产品推荐
相关产品推荐

