Python快速合并多个字段排序不规范和缺失的Excel文件

几行代码实现文件夹下所有不规范、字段参差不齐的Excel表格的快速合并。

本文章使用的表格如下:

表格1

表格2

表格3

表格4


假设有3个EXCEL表格,当然你也可以有无穷多个。

Excel表格1

省份 城市 日期 人口
河南 郑州 2021-03 620
河南 洛阳 2021-03 340
上海 上海 2021-03 1200
江苏 苏州 2021-03 530
江苏 南京 2021-03 624

Excel表格2

日期 省份 城市 城市等级 人口
2021-10 河南 郑州 二线 620
2021-10 河南 洛阳 三线 340
2021-10 上海 上海 超一线 1200
2021-10 江苏 苏州 一线 530
2021-10 江苏 南京 一线 624

Excel表格3

日期 省份 城市 城市等级 人口 人均收入
2021-11 河南 郑州 二线 620 12000
2021-11 河南 洛阳 三线 340 5605
2021-11 上海 上海 超一线 1200 12328
2021-11 江苏 苏州 一线 530 8900
2021-11 江苏 南京 一线 624 9640

对比3个表格:

  1. 每个表格的列顺序都不尽相同
  2. 每个表格里的字段都不尽相同
  3. 但有一个表格3里边的字段涵盖了表格1和表格2中的所有列,当然也有一种可能就是没有一个表格字段涵盖所有其他表格的,例如新增一个表格4

Excel表格4

日期 省份 城市 人均收入 区域负责人
2021-11 河南 郑州 12000 张三
2021-11 河南 洛阳 5605 张三
2021-11 上海 上海 12328 李四
2021-11 江苏 苏州 8900 李四
2021-11 江苏 南京 9640 李四


各个Excel表格字段对比

表格1字段 表格2字段 表格3字段 表格4字段
省份 日期 日期 日期
城市 省份 省份 省份
日期 城市 城市 城市
人口 城市等级 城市等级 人均收入
人口 人口 区域负责人
人均收入

现在的需求是把4个表格快速的合并为1个表格,但如上表格、没有统一的一个表格中的字段涵盖了所有表格,每个表格的字段顺序都不一样,so FKU。。。。。 😄哈哈哈哈



实现4个表格的逻辑主要如下:

  1. 找出所有表格的字段名字并去重
  2. 循环每个表格,第一步获取到的字段名称如果在当前循环的表格不存在、则创建字段并赋值为空

对,就2步…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 根据文件所在目录,获取所有DF的key和数据
paths = '/guidebook/concat_excel/'
keys_list = []
df_list = []
for i in os.listdir(paths):
df = pd.read_excel(paths + i)
keys_list.append(list(df.keys()))
df_list.append(df)

# keys_list合并去重
df_key = []
for item in keys_list:
for k in item:
df_key.append(k)
df_key = list(set(df_key))

# 合并4个表格,如果某一个表格字段缺失则补充该字段并赋值为空
df_excel = []
for i in df_list:
for k in i.keys():
if k not in i.keys():
i[k] = np.NaN
df_excel.append(i)
DataFrame = pd.concat([df for df in df_excel])
DataFrame.reset_index(drop=True, inplace=True)

合并之后的表格效果如下

image-20211123152842007