在数据处理和分析中,CSV文件是最常用的存储格式之一。今天,我们将介绍一个常见的任务:如何根据某个字段(比如国家)拆分一个大的CSV文件,并将每个拆分出来的文件统计信息(如行数)保存到一个Excel文件中。我们将结合Python的pandas库来完成这项工作,最后我们还会使用openpyxl库为生成的Excel文件添加超链接,便于查看原始文件路径。
实现步骤
- 读取原始CSV文件。
- 根据country列的不同值拆分数据,并保存为新的CSV文件。
- 统计每个CSV文件的行数,并记录文件的路径。
- 将统计信息保存到一个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}")
代码分析
- 读取原始CSV文件:首先使用pandas.read_csv()方法读取原始的CSV文件。我们将文件路径定义为file_path,并加载到DataFrame中。
- 拆分数据:使用DataFrame[‘country’].unique()获取所有唯一的国家,然后遍历这些国家,使用DataFrame[df[‘country’] == country]来筛选出每个国家对应的数据。
- 保存CSV文件:为每个国家生成一个新的CSV文件,使用to_csv()方法将拆分出来的数据保存为新的CSV文件。
- 统计数据:通过len(df_country)获取每个拆分后文件的行数,并将文件名、行数和文件路径存储到列表file_stats中。
- 生成Excel文件:使用pandas.ExcelWriter()将统计信息保存到Excel文件中,同时为每个文件名添加超链接,便于快速访问对应的CSV文件。
运行此脚本后,output文件夹中将包含按国家拆分的多个CSV文件。同时,生成的Excel文件csv_file_stats.xlsx将保存文件名、行数以及文件路径等信息,且每个文件名会是一个超链接,方便你直接跳转到相关文件。