Pandas循环追加多个DataFrame仅返回空数据框问题求解
问题成因
- pandas的
DataFrame.append()方法不属于原地修改操作:执行该方法后不会修改原有df_total对象,只会返回一个追加完成的新DataFrame。你现有代码中没有将方法返回的新对象赋值给df_total,所以变量一直保持初始的空状态。 - 补充说明:
append方法已经在pandas 2.0+版本中被正式弃用,官方更推荐使用性能更高的pd.concat()方法完成多数据框合并操作。
解决方法
方案1:最小改动适配现有代码
只需要将追加行的代码改为赋值回df_total即可:
# 把原来的 df_total.append(df,ignore_index=True) 替换为下方代码 df_total = df_total.append(df, ignore_index=True)
方案2:替换为官方推荐的pd.concat写法(性能更优,推荐)
循环中先把所有处理好的DataFrame存入列表,最后一次性合并,避免循环内反复生成新DataFrame带来的性能损耗,完整修改代码如下:
import time start_time = time.time() # 创建临时列表存放所有处理完成的DataFrame df_list = [] for i in range(0, len(dataframe_csv)): df = pd.read_csv(dataframe_csv[i]) df = df.drop(index=df.index[0], axis=0) df = df.assign(Date = date_list[i]) df_list.append(df) # 一次性合并所有DataFrame df_total = pd.concat(df_list, ignore_index=True) elapsed_time = time.time() - start_time print(elapsed_time)
修改完成后再执行df_total.shape即可得到正常的非空维度结果。
内容的提问来源于stack exchange,提问作者Chriz
相关产品推荐
相关产品推荐

