Python Pandas:循环查找表头名实现Excel数据重构需求
优化Excel数据重构:高效提取拒收单元相关数据到新表
嘿,看你正在处理Excel数据的重构需求——要筛选出有拒收单元的行,然后提取指定列生成更简洁的新表对吧?用Pandas处理这类表格数据,完全没必要逐行循环,用向量化操作+布尔索引的组合,既高效又简洁,我帮你把代码捋顺:
第一步:筛选出存在拒收单元的行
先通过布尔条件直接筛选Total Unit Rejected大于0的所有行,这比逐行遍历快太多了:
# 筛选拒收单元数量大于0的行 filtered_rows = df[df['Total Unit Rejected'] > 0]
第二步:提取目标列生成新DataFrame
你提到要提取第3到7列的表头对应值,先把这些列名列出来(比如你说的Total Unit Tested、Total Unit Rejected还有Not...这类列),然后用双层方括号选择多列就行(注意单层方括号返回的是Series,双层才是DataFrame):
# 替换成你实际需要保留的列名(对应原表第3-7列的表头) target_columns = ['Total Unit Tested', 'Total Unit Rejected', 'Not Conforming', 'Reworked Units', 'Scrapped Units'] # 生成独立的新DataFrame,加copy()避免警告 new_dataframe = filtered_rows[target_columns].copy()
完整可运行代码示例
把读取、筛选、提取、保存的流程整合起来,就是这样:
import pandas as pd # 读取原始Excel文件(替换成你的文件路径) df = pd.read_excel('original_data.xlsx') # 定义要保留的目标列(根据你的实际表头调整) target_columns = ['Total Unit Tested', 'Total Unit Rejected', 'Not Conforming'] # 一步完成筛选+提取 new_dataframe = df[df['Total Unit Rejected'] > 0][target_columns].copy() # 保存到新的简洁Excel文件,index=False不保留行索引,更清爽 new_dataframe.to_excel('cleaned_rejected_data.xlsx', index=False)
几个关键提醒
- 别用
for each逐行循环啦!Pandas的向量化操作在数据量大的时候,速度会比循环快几十甚至上百倍 - 选择多列一定要用
df[['列名1', '列名2']]这种双层方括号,不然会拿到单个Series而不是表格 - 加
.copy()是为了避免Pandas的SettingWithCopyWarning,确保新的DataFrame是完全独立的对象,后续修改不会影响原数据
内容的提问来源于stack exchange,提问作者Michael Hess
相关产品推荐
相关产品推荐

