合并同表头CSV至DataFrame遇问题:读取文件后得到空列表
解决CSV文件合并时读取得到空列表的问题
问题原因
Path.glob()返回的是生成器对象,生成器仅能被遍历一次。你第一次用for f in files打印文件名时,已经耗尽了生成器内的所有元素;第二次再遍历files时,自然没有内容,因此得到空的DataFrame列表。
解决方案
提供两种可行的修改方式:
方式一:将生成器转为列表(支持多次遍历)
把glob返回的生成器转换成列表,保存所有文件路径,这样可以多次使用:
from pathlib import Path import pandas as pd path = '//Users//Directory//' # 转换生成器为列表,存储所有CSV文件路径 files = list(Path(path + "dirtest//").glob('*.csv')) # 打印文件名 for f in files: print(f.name) # 读取所有CSV到DataFrame列表 dfs = [pd.read_csv(f) for f in files] # 合并为单个DataFrame base_renov = pd.concat(dfs, ignore_index=True)
方式二:单次遍历完成打印与读取
在同一次遍历中完成文件名打印和文件读取,避免重复遍历生成器:
from pathlib import Path import pandas as pd path = '//Users//Directory//' files = Path(path + "dirtest//").glob('*.csv') dfs = [] for f in files: print(f.name) # 读取文件并添加到列表 dfs.append(pd.read_csv(f)) # 合并DataFrame base_renov = pd.concat(dfs, ignore_index=True)
额外提示
- 确保所有CSV文件的表头结构一致,否则
pd.concat可能出现列对齐问题 - 若CSV文件存在编码错误,可在
pd.read_csv中指定编码参数,例如pd.read_csv(f, encoding='utf-8')或pd.read_csv(f, encoding='gbk')
内容的提问来源于stack exchange,提问作者XisCafe
相关产品推荐
相关产品推荐

