如何按名称标识与长度筛选合并目录下的三类CSV DataFrame?
解决多CSV文件按规则合并DataFrame的Python函数完善方案
我帮你把这个函数的逻辑补全,直接上可运行的代码,每一步都讲得明明白白:
首先得确保你导入了需要的基础库:
import os import pandas as pd
然后是完善后的完整函数:
def Concat_Intermed_Dataframes(batchname, changebatch, my_path, filename): print("Start concatenating") # 初始化三个空列表,用来收集符合条件的DataFrame(批量收集后合并更高效) small_letters_dfs = [] seo_update_dfs = [] new_term_dfs = [] # 拼接目标目录的完整路径,避免工作目录差异导致的文件找不到问题 intermed_dir = os.path.join(my_path, changebatch, batchname, "intermed") List_For_Concat = os.listdir(intermed_dir) for element in List_For_Concat: # 拼接单个文件的完整路径 file_full_path = os.path.join(intermed_dir, element) if "Small_Letters" in element: df = pd.read_csv(file_full_path) # 只保留有数据的DataFrame(行数>0) if len(df) > 0: small_letters_dfs.append(df) elif "SEO_Update" in element: df = pd.read_csv(file_full_path) if len(df) > 0: seo_update_dfs.append(df) elif "NewTerm" in element: df = pd.read_csv(file_full_path) if len(df) > 0: new_term_dfs.append(df) # 合并收集到的DataFrame,空列表返回空DataFrame避免报错 concat_small = pd.concat(small_letters_dfs, ignore_index=True) if small_letters_dfs else pd.DataFrame() concat_seo = pd.concat(seo_update_dfs, ignore_index=True) if seo_update_dfs else pd.DataFrame() concat_newterm = pd.concat(new_term_dfs, ignore_index=True) if new_term_dfs else pd.DataFrame() return concat_small, concat_seo, concat_newterm
关键细节说明:
- 用列表批量收集符合条件的DataFrame,最后一次性合并,比逐次合并效率更高;
- 全程使用完整文件路径,避免因当前工作目录变化导致的文件读取失败;
- 加入
len(df) > 0的判断,严格过滤空数据的文件; - 合并时设置
ignore_index=True,重置合并后DataFrame的索引,避免不同文件的索引重复混乱; - 处理空列表边界情况:如果某一类没有符合条件的文件,返回空的DataFrame,防止
pd.concat抛出异常。
内容的提问来源于stack exchange,提问作者yannickhau
相关产品推荐
相关产品推荐

