拆分CSV文件并统计文件信息

在数据处理和分析中,CSV文件是最常用的存储格式之一。今天,我们将介绍一个常见的任务:如何根据某个字段(比如国家)拆分一个大的CSV文件,并将每个拆分出来的文件统计信息(如行数)保存到一个Excel文件中。我们将结合Python的pandas库来完成这项工作,最后我们还会使用openpyxl库为生成的Excel文件添加超链接,便于查看原始文件路径。

实现步骤

  1. 读取原始CSV文件。
  2. 根据country列的不同值拆分数据,并保存为新的CSV文件。
  3. 统计每个CSV文件的行数,并记录文件的路径。
  4. 将统计信息保存到一个Excel文件中,并为每个文件添加超链接。

代码实现

import pandas as pd
import os
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# 读取原始CSV文件
file_path = "temp.csv"  # 替换为你的CSV文件路径
df = pd.read_csv(file_path)

# 创建 output 文件夹(如果不存在的话)
output_folder = "output"
os.makedirs(output_folder, exist_ok=True)

# 获取所有唯一的国家
countries = df['country'].unique()

# 存储文件名和行数的列表
file_stats = []

# 按国家拆分数据并保存为不同的CSV文件,同时统计行数
for country in countries:
    # 按照国家筛选数据
    df_country = df[df['country'] == country]

    # 生成输出文件的路径
    output_file = os.path.join(output_folder, f"{country}_data.csv")

    # 保存为新的CSV文件
    df_country.to_csv(output_file, index=False, encoding='utf-8-sig')
    print(f"已生成: {output_file}")

    # 统计行数并添加到文件统计列表
    num_rows = len(df_country)
    file_stats.append([f"{country}_data.csv", num_rows, output_file])

# 将统计数据保存到一个Excel文件
stats_df = pd.DataFrame(file_stats, columns=["File Name", "Row Count", "File Path"])

# 创建一个Excel工作簿
excel_output = "csv_file_stats.xlsx"
with pd.ExcelWriter(excel_output, engine='openpyxl') as writer:
    stats_df.drop(columns=["File Path"]).to_excel(writer, index=False, sheet_name="File Stats")

    # 获取Excel文件中的工作表
    workbook = writer.book
    worksheet = workbook["File Stats"]

    # 为每个文件名添加超链接
    for row in range(2, len(stats_df) + 2):  # 从第二行开始处理,因为第一行是标题
        file_name = worksheet.cell(row=row, column=1).value
        file_path = stats_df.iloc[row - 2]["File Path"]  # 获取文件路径
        # 设置超链接
        worksheet.cell(row=row, column=1).hyperlink = f"{file_path}"
        worksheet.cell(row=row, column=1).style = 'Hyperlink'

print(f"统计结果已保存至 {excel_output}")

代码分析

  1. 读取原始CSV文件:首先使用pandas.read_csv()方法读取原始的CSV文件。我们将文件路径定义为file_path,并加载到DataFrame中。
  2. 拆分数据:使用DataFrame[‘country’].unique()获取所有唯一的国家,然后遍历这些国家,使用DataFrame[df[‘country’] == country]来筛选出每个国家对应的数据。
  3. 保存CSV文件:为每个国家生成一个新的CSV文件,使用to_csv()方法将拆分出来的数据保存为新的CSV文件。
  4. 统计数据:通过len(df_country)获取每个拆分后文件的行数,并将文件名、行数和文件路径存储到列表file_stats中。
  5. 生成Excel文件:使用pandas.ExcelWriter()将统计信息保存到Excel文件中,同时为每个文件名添加超链接,便于快速访问对应的CSV文件。

运行此脚本后,output文件夹中将包含按国家拆分的多个CSV文件。同时,生成的Excel文件csv_file_stats.xlsx将保存文件名、行数以及文件路径等信息,且每个文件名会是一个超链接,方便你直接跳转到相关文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值