You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何合并列名相同的多个CSV文件并生成指定结构的合并表格

合并多份CSV文件并按公司对齐补全数据

我来帮你搞定这个CSV合并的需求!用Python的pandas库就能轻松实现,下面是详细的步骤和代码:

首先,确保你已经安装了pandas,如果还没装,打开终端运行这个命令:

pip install pandas

接下来是具体的代码实现,我会逐行解释:

import pandas as pd

# 1. 读取三个CSV文件,注意你的文件用|作为分隔符,所以要指定sep参数
june_df = pd.read_csv('june.csv', sep='|')
july_df = pd.read_csv('july.csv', sep='|')
august_df = pd.read_csv('august.csv', sep='|')

# 2. 清理数据:去除列名和company_name中的空格,同时把数值列转成整数
# 因为你的CSV里分隔符|两边有空格,读取后会带多余空格,必须处理
for df in [june_df, july_df, august_df]:
    # 去除列名的前后空格
    df.columns = df.columns.str.strip()
    # 去除公司名称的前后空格
    df['company_name'] = df['company_name'].str.strip()
    # 把员工数和花费转成整数类型
    df['number_of_employers'] = df['number_of_employers'].astype(int)
    df['money_spend'] = df['money_spend'].astype(int)

# 3. 给每个月份的列添加前缀,避免合并时列名冲突
june_df = june_df.rename(columns={
    'number_of_employers': 'june_number_of_employers',
    'money_spend': 'june_money_spend'
})
july_df = july_df.rename(columns={
    'number_of_employers': 'july_number_of_employers',
    'money_spend': 'july_money_spend'
})
august_df = august_df.rename(columns={
    'number_of_employers': 'august_number_of_employers',
    'money_spend': 'august_money_spend'
})

# 4. 按company_name进行外连接,这样所有公司都会被保留,不管哪个月份有数据
# 先合并august和july,再合并june(如果不需要june可以跳过这一步)
merged_df = august_df.merge(july_df, on='company_name', how='outer')
merged_df = merged_df.merge(june_df, on='company_name', how='outer')

# 5. 把缺失的数值填充为0,也就是某个月份没有该公司数据时补0
merged_df = merged_df.fillna(0)

# 6. 把填充后的浮点数转成整数(因为fillna后数值会变成浮点数)
numeric_cols = [col for col in merged_df.columns if col != 'company_name']
merged_df[numeric_cols] = merged_df[numeric_cols].astype(int)

# 7. 调整列的顺序,完全匹配你想要的结构
desired_order = [
    'company_name',
    'august_number_of_employers', 'august_money_spend',
    'july_number_of_employers', 'july_money_spend',
    'june_number_of_employers', 'june_money_spend'
]
merged_df = merged_df[desired_order]

# 8. 保存合并后的文件,同样用|作为分隔符,不保存索引列
merged_df.to_csv('merged_months.csv', sep='|', index=False)

代码说明:

  • 清理数据:因为你的CSV是用|分隔且两边带空格,所以必须先去除空格,否则合并时会因为公司名称带空格导致匹配失败。
  • 外连接(how='outer'):这是关键,能保证所有出现在任意一个CSV里的公司都会被保留,不会丢失数据。
  • 填充0:用fillna(0)把缺失的月份数据补成0,完全符合你要的输出格式。

如果只需要合并july和august,直接去掉june相关的代码即可,运行后就能得到你示例中的结果啦!

内容的提问来源于stack exchange,提问作者Kristina

火山引擎 最新活动