如何将Pandas DataFrame的describe()结果转为单行表头+单行数据格式
解决方案:批量处理数据文件并转换统计结果格式
核心思路
逐个读取数据文件生成DataFrame,执行describe()后通过层级索引重塑,把「列名-统计量」拼接为新表头,将多统计行转成单行数据,最后批量追加到CSV文件,方便后续筛选最优值。
1. 依赖导入与路径配置
先导入必备模块,指定数据文件目录和输出CSV的路径:
import pandas as pd import os # 替换为你的实际路径 data_dir = "./your_data_files" output_csv = "stats_summary.csv"
2. 单个文件处理函数
封装读取、统计、格式转换的逻辑,一次处理一个文件:
def process_file(file_path): # 读取文件(如果是Excel,换成pd.read_excel,按需调整参数) df = pd.read_csv(file_path) # 生成统计描述(默认包含count/mean/std/min/25%/50%/75%/max) stats = df.describe() # 重塑格式:将列名和统计量拼接成新表头,转成单行 stats_t = stats.T # 转置让列名作为行索引,统计量作为列 # 拼接列名-统计量作为新的索引 stats_t.index = stats_t.index + "-" + stats_t.columns # 转成单行数据 single_row = stats_t.stack().unstack().reset_index(drop=True).to_frame().T # 添加文件名,方便后续溯源哪个文件的统计结果 single_row["文件名"] = os.path.basename(file_path) return single_row
3. 批量处理并写入CSV
遍历目录下的所有目标文件,逐个处理后追加到输出CSV:
# 遍历目录下的CSV文件(按需替换成你的文件后缀,如.xlsx) for file_name in os.listdir(data_dir): if file_name.endswith(".csv"): file_path = os.path.join(data_dir, file_name) try: result_row = process_file(file_path) # 首次写入时带表头,后续追加不写表头 if not os.path.exists(output_csv): result_row.to_csv(output_csv, index=False, encoding="utf-8") else: result_row.to_csv(output_csv, index=False, encoding="utf-8", mode="a", header=False) print(f"处理完成:{file_name}") except Exception as e: print(f"处理{file_name}出错:{str(e)}")
额外说明
- 自定义统计量:如果不需要
describe()默认的全量统计,可以手动指定需要的指标,比如只保留mean/std/min/max:custom_stats = df.agg({ "Height": ["mean", "std", "min", "max"], "Weight": ["mean", "std", "min", "max"], # 其他列同理 }) # 后续格式转换逻辑和上述一致 - 性能优化:如果文件体积较大,可使用
pd.read_csv(chunksize=xxx)分批读取;1000个文件也可以用multiprocessing多进程处理提速。
内容的提问来源于stack exchange,提问作者Glabella Streamline
相关产品推荐
相关产品推荐

