将不同子文件夹下的Excel文件汇总到一个Excel表中,要求所有数据共用新建的自定义表头; 从excel文件的文件名中获取日期和地域信息,作为两个新增字段加入汇总表; 各excel表中字段信息较多,仅汇总其中有效的字段; 处理列名称不一致的情况; 处理列顺序不一致的情况; 如果某个字段本应是数值类型,但一些表却是以文本类型保存的,在汇总表中需要把这个字段需要统一转化为数值类型保存; 如果某个表中缺少对应字段,则汇总时显示空值
时间: 2024-02-20 15:01:30 浏览: 93
Element实现表格嵌套、多个表格共用一个表头的方法
好的,这是一个比较复杂的数据处理需求,需要进行多个步骤的操作。下面是我给出的步骤和思路:
1. 首先需要遍历所有的子文件夹,获取到所有的Excel文件路径。
2. 然后,需要读取每个Excel文件的数据,将其中有效的字段筛选出来,同时将字段名称和顺序进行统一。
3. 接着,需要获取每个Excel文件的文件名,从中提取出日期和地域信息,作为新增的两个字段加入汇总表。
4. 将所有的Excel数据汇总到一个新的Excel表中,使用自定义的表头命名每个字段。
5. 如果某个字段本应是数值类型,但一些表却是以文本类型保存的,在汇总表中需要把这个字段需要统一转化为数值类型保存。
6. 如果某个表中缺少对应字段,则汇总时显示空值。
以下是每个步骤的具体实现:
1. 遍历所有子文件夹,获取Excel文件路径
可以使用Python中的os模块和os.walk()方法来实现:
``` python
import os
excel_files = []
# 遍历所有子文件夹,获取Excel文件路径
for root, dirs, files in os.walk('path/to/folder'):
for file in files:
if file.endswith('.xlsx'):
excel_files.append(os.path.join(root, file))
```
2. 读取每个Excel文件的数据,筛选有效字段,统一字段名称和顺序
可以使用Python的pandas库来读取Excel数据,使用DataFrame中的方法来筛选、重命名和重新排列字段。
``` python
import pandas as pd
new_columns = ['date', 'region', 'col1', 'col2', 'col3'] # 新的字段顺序和名称
valid_columns = ['col1', 'col2', 'col3'] # 有效的字段名称
# 读取单个Excel文件的数据
df = pd.read_excel('path/to/excel.xlsx')
# 筛选出有效的字段
df = df[valid_columns]
# 重命名字段
df.rename(columns={'old_col1': 'col1', 'old_col2': 'col2', 'old_col3': 'col3'}, inplace=True)
# 重新排列字段
df = df[new_columns]
```
3. 获取文件名中的日期和地域信息
可以使用Python中的正则表达式来匹配文件名中的日期和地域信息,然后将其作为新增的两个字段加入汇总表。
``` python
import re
filename = '20211111_beijing.xlsx'
# 从文件名中提取日期和地域信息
match = re.match(r'(\d{8})_(\w+).xlsx', filename)
date = match.group(1)
region = match.group(2)
# 将日期和地域信息作为新增字段加入DataFrame
df['date'] = date
df['region'] = region
```
4. 将所有Excel数据汇总到一个新的Excel表中,使用自定义的表头命名每个字段
可以使用pandas中的concat()方法将多个DataFrame合并为一个,并使用自定义的表头命名每个字段。
``` python
# 将所有Excel数据汇总到一个新的DataFrame中
merged_df = pd.concat([df1, df2, df3, ...])
# 使用自定义的表头命名每个字段
merged_df.columns = ['date', 'region', 'col1', 'col2', 'col3']
```
5. 如果某个字段本应是数值类型,但一些表却是以文本类型保存的,在汇总表中需要把这个字段需要统一转化为数值类型保存。
可以使用pandas中的astype()方法将某个字段的类型转换为数值类型。
``` python
merged_df['col1'] = merged_df['col1'].astype(float)
```
6. 如果某个表中缺少对应字段,则汇总时显示空值。
可以使用pandas中的merge()方法进行数据合并。在合并过程中,可以使用how='outer'参数来保留所有记录,即使某个表中缺少对应字段,也能在汇总表中显示空值。
``` python
# 合并两个DataFrame,保留所有记录
merged_df = pd.merge(df1, df2, how='outer', on=['date', 'region'])
```
阅读全文