循环使用pd.concat拼接多份CSV数据集仅返回单份数据问题
问题原因
- 核心错误是循环内对
combined_dataset的赋值逻辑完全错误:- 每次调用
pd.concat([pd.read_csv(f)])时,传入的列表里只有当前单次读取的单个CSV对应的DataFrame,concat操作等同于直接返回该单个DataFrame,没有实现多数据拼接 - 每次循环都直接把上述结果赋值给
combined_dataset,直接覆盖了上一次循环的结果,最终变量里只保留了循环处理的最后一个CSV文件的内容,也就是你看到的2019年、邮政编码为000001的对应数据,这份文件刚好是你文件夹排序下最后一个被遍历到的CSV。
- 每次调用
正确实现方式
推荐先把所有读取的DataFrame存入列表,最后统一做拼接,内存效率更高:
import os import pandas as pd directory = '/MyDirectory' os.chdir(directory) files = os.listdir() # 初始化空列表存储所有读取到的DataFrame df_list = [] for f in files: if f.endswith('.csv'): df_list.append(pd.read_csv(f)) # 所有文件读完后统一拼接,ignore_index=True可以重置行索引避免重复 combined_dataset = pd.concat(df_list, ignore_index=True)
补充说明:如果要在循环内逐步拼接,写法为
combined_dataset = pd.concat([combined_dataset, pd.read_csv(f)], ignore_index=True),但该方式每次循环都要重新生成新的DataFrame,文件数量多的时候效率远低于先存列表再统一拼接的方案,不推荐使用。
内容的提问来源于stack exchange,提问作者panino00
相关产品推荐
相关产品推荐

