|
发表于 2025-2-17 23:29:43
|
显示全部楼层
好的,如果需要忽略第一列,并将小标题的某一列作为表头,可以参考下面的代码进行调整。以下代码假设小标题行中某一列具有特定的标志,用于识别和设置表头:
- import os
- import pandas as pd
- def process_excel_file(file_path):
- # 读取Excel文件,并指定header=None以逐行读取
- df = pd.read_excel(file_path, header=None)
-
- # 忽略第一列
- df = df.iloc[:, 1:]
-
- # 找到小标题行,假设小标题具有特定标志(例如,该行的某一列包含特定值)
- header_row_index = df[df.iloc[:, 0].str.contains('小标题标志', na=False)].index[0]
-
- # 设定该行为新的表头,并重新读取数据
- df.columns = df.iloc[header_row_index]
- df = df[header_row_index + 1:] # 删除小标题行及其之前的行
-
- # 重置索引
- df.reset_index(drop=True, inplace=True)
-
- return df
- def merge_excel_files_from_folders(root_folder):
- all_data = pd.DataFrame()
-
- for foldername, subfolders, filenames in os.walk(root_folder):
- for filename in filenames:
- if filename.endswith('.xlsx') or filename.endswith('.xls'):
- file_path = os.path.join(foldername, filename)
-
- # 处理单个文件并标准化数据
- df = process_excel_file(file_path)
-
- # 合并数据
- all_data = pd.concat([all_data, df], ignore_index=True)
- return all_data
- def save_merged_data_to_excel(data, output_file):
- data.to_excel(output_file, index=False)
- if __name__ == "__main__":
- root_folder = "E:/ai/shiyan"
- output_file = "E:/ai/shiyan/merged_data.xlsx"
-
- merged_data = merge_excel_files_from_folders(root_folder)
- save_merged_data_to_excel(merged_data, output_file)
-
- print(f"数据已成功合并并保存到 {output_file}")
复制代码
### 关键修改点:
1. **忽略第一列**:使用 df = df.iloc[:, 1:] 来忽略第一列。
2. **找到并设置新的表头**:通过指定标志(如小标题标志)找到小标题行的索引,并将此行设为新的表头。
3. **删除小标题行及其之前的行**:根据计算出的索引范围删除这些行。
4. **重置索引**:使用 df.reset_index(drop=True, inplace=True) 重新设置DataFrame的索引。
请根据具体的小标题标志来调整识别条件和处理逻辑。这段代码将帮助您根据需求合并多个Excel文件的数据。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|