将pandas pivot_table结果存入CSV时丢失表头数据的求助
解决Pandas Pivot Table保存CSV时丢失数据/表头的问题
我猜你遇到的问题大概率是Pivot Table生成的结果带有索引,或者表头层级的问题导致保存CSV时看起来数据不全。先把你的示例代码补全,然后一步步解决:
首先,先看完整的示例代码(补全了pivot_table的常见用法):
import pandas as pd import numpy as np data = [ {'TestPriority': 3, 'AutomationStatus': 'Done'}, {'TestPriority': 4, 'AutomationStatus': 'Review'}, {'TestPriority': 2, 'AutomationStatus': 'Review for Automation'}, {'TestPriority': 2, 'AutomationStatus': 'Review for Automation'} ] df = pd.DataFrame(data) df['AutomationStatus'] = np.where( df['AutomationStatus'] == 'Done', 'Automated', 'Manual' ) # 按优先级和自动化状态统计数量 res = df.pivot_table( index='TestPriority', columns='AutomationStatus', aggfunc='size', fill_value=0 )
常见问题与解决方案
1. 索引未转为普通列,导致表头/数据显示异常
默认pivot_table的结果会把index参数指定的列作为行索引,直接保存CSV时,这个索引会作为第一列但没有列名,看起来像是表头缺失。解决方法是重置索引,把索引转为普通列:
# 重置索引,将TestPriority转为普通列 res.reset_index(inplace=True) # 保存时不要写入默认的行索引 res.to_csv('pivot_result.csv', index=False)
这样保存后的CSV会有完整的表头:TestPriority,Automated,Manual,数据也全部保留:
TestPriority,Automated,Manual 2,0,2 3,1,0 4,0,1
2. 多层表头导致保存混乱
如果你的pivot_table使用了多个聚合函数或多层列,会生成多层表头,直接保存CSV可能会出现表头拆分的问题。可以先扁平化表头:
# 示例:使用多个聚合函数 res = df.pivot_table( index='TestPriority', columns='AutomationStatus', aggfunc={'TestPriority': ['count', 'sum']}, fill_value=0 ) # 扁平化多层表头,用下划线连接层级 res.columns = ['_'.join(col).strip() for col in res.columns.values] # 重置索引并保存 res.reset_index(inplace=True) res.to_csv('pivot_result_flat.csv', index=False)
保存后的表头会变成:TestPriority,Automated_count,Automated_sum,Manual_count,Manual_sum,结构清晰。
3. 缺失分组被自动丢弃
如果某些TestPriority没有对应的AutomationStatus,默认pivot_table会丢弃这些分组。可以加上dropna=False强制保留所有可能的分组:
res = df.pivot_table( index='TestPriority', columns='AutomationStatus', aggfunc='size', fill_value=0, dropna=False )
这样即使某个优先级没有自动化或手动的测试用例,也会保留行并用0填充。
内容的提问来源于stack exchange,提问作者Mahyar
相关产品推荐
相关产品推荐

