将多个文件导入pandas生成DataFrame的问题求助
Pandas多文件导入问题解答
报错原因说明
你遇到的报错是因为dataframe_list中的每个元素本身就是DataFrame结构,直接传入pd.DataFrame()构造函数属于错误用法:pandas会尝试将每个子DataFrame作为新DataFrame的单元素行,因各子DataFrame行数不一致,触发了参差不齐嵌套序列的警告。
Q1:基于dataframe_list创建统一的DataFrame
使用pandas内置的concat方法拼接所有子DataFrame即可:
# ignore_index参数会重置合并后的全局行索引,避免不同子DataFrame的行索引重复 unified_df = pd.concat(dataframe_list, ignore_index=True)
如果需要后续追溯每行数据的来源文件,可以修改遍历逻辑,给每个子DataFrame新增来源文件标识列后再合并:
dataframe_list = [] for file_name in files_list: with open(file_name, "r") as f: lines = f.readlines() parsed_data = [process(line) for line in lines] df = pd.DataFrame(parsed_data) # 新增列记录数据所属文件 df['source_file'] = file_name dataframe_list.append(df) unified_df = pd.concat(dataframe_list, ignore_index=True)
Q2:生成对应文件名的独立DataFrame
推荐使用字典存储文件名和对应DataFrame的映射关系,相比零散的独立变量更易统一管理:
# 初始化空字典存储映射关系 df_mapping = {} for file_name in files_list: with open(file_name, "r") as f: lines = f.readlines() parsed_data = [process(line) for line in lines] df = pd.DataFrame(parsed_data) # 去除后缀.all,生成你需要的dir1/file1格式的键,Python3.9以下版本替换为file_name.rsplit('.',1)[0] file_key = file_name.removesuffix('.all') df_mapping[file_key] = df
后续需要调用对应文件的DataFrame时,直接按文件名索引即可,例如df_mapping['dir1/file1']即可取出对应文件的数据。
内容的提问来源于stack exchange,提问作者I'm not a robot
相关产品推荐
相关产品推荐

