如何合并多份CSV文件并构建符合要求的Pandas DataFrame
CSV合并与数据重塑实现方案
数据源为World压缩包,解压后包含多个待处理的CSV文件。以下是针对需求的完整实现:
完整代码
import pandas as pd import glob # 1. 合并当前目录下所有CSV文件 file_list = glob.glob("*.csv") merged_df = pd.concat([pd.read_csv(f) for f in file_list], ignore_index=True) # 2. 设置列名、删除指定列、提取矿物名称 merged_df.columns = ['Type', 'Country', 'Source', 'Prod_t_2021', 'Prod_t_2022', 'Reserves_t', 'Reserves_notes'] merged_df = merged_df.drop('Source', axis=1) # 从Type列提取Mineral name(假设格式为"矿物名称 - 类型",可根据实际格式调整拆分规则) merged_df['Mineral name'] = merged_df['Type'].str.split(' - ', expand=True)[0] # 3. 数据重塑:将第4列(D列)及以后的列转换为行 reshaped_df = pd.melt( merged_df, id_vars=['Mineral name', 'Type', 'Country'], var_name='Metric' ).sort_values('Type').reset_index(drop=True) # 输出符合预期格式的结果 for _, row in reshaped_df.iterrows(): print(f"{row['Mineral name']} - {row['Type']} - {row['Country']} - {row['Metric']}")
原代码问题修正
- 合并逻辑失效:原循环仅读取单个文件并覆盖变量,改用
pd.concat批量合并所有CSV文件 - 列操作顺序错误:需先完成文件合并再设置列名,避免未初始化DataFrame的报错
- melt参数错误:
id_vars需传入列名字符串,而非DataFrame对象 - 缺失矿物名称提取:新增从Type列拆分出Mineral name的逻辑,匹配预期输出要求
预期输出格式
Mineral name - Type - Country - Prod_t_2021 Mineral name - Type - Country - Prod_t_2022 Mineral name - Type - Country - Reserves_t Mineral name - Type - Country - Reserves_notes
内容的提问来源于stack exchange,提问作者user21084142
相关产品推荐
相关产品推荐

