You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并多份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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:30:55