def read_pdf_2020(read_path):
pdf_2020 = pdfplumber.open(read_path)
result_df = pd.DataFrame()
for page in pdf_2020.pages:
table = page.extract_table()
df_detail = pd.DataFrame(table[1:], columns=table[0])
# 合并每页的数据集
result_df = pd.concat([df_detail, result_df], ignore_index=True)
# 删除值全部是 NaN 的列
result_df.dropna(axis=1, how=‘all’, inplace=True)
# 重置列名
result_df.columns = [‘奖项’, ‘作品编号’, ‘作品名称’, ‘参赛学校’, ‘作者’, ‘指导老师’]
return result_df
df_2020 = read_pdf_2020(‘2020年中国大学生计算机设计大赛参赛作品获奖名单.pdf’)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c9139c4151d4f8190fcf8760a020c8a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlYW3kuLZLaWxsZXI=,size_13,color_FFFFFF,t_70,g_se,x_16)
观察 2020 年的数据,相比于前两年的数据,它的各列都没有缺失值,但2020年的获奖信息中并没有包含作品类别这一列,所以我们处理数据集时要将前两年的类别列进行删除。这样,我们可以按照 2020 数据集的格式作为模板,将前两年的数据集转换为相同的格式,再进行合并。
### 数据预处理
#### 各年数据集格式化
按照 2020 年格式,将 2018 年与 2019 年数据集中部分列进行合并,并更换列名,删除多余的列。并添加 “年份” 这一列。
下面是处理后的 2018 年与 2019 年数据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f6f3f8502c24467e8a4a3645bbfcd900.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlYW3kuLZLaWxsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d597cc8247c4d639f8411b308abaa28.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlYW3kuLZLaWxsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
对于 2020 年数据集的处理要注意,数据读取时是基于每页数据来读取的,如果在一页的最后一行数据较多,需要换行的话,那么下一页首行数据就会缺失,如下所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bd4f7d7d8b44363aaf03f33799aa5b7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBARHJlYW3kuLZLaWxsZXI=,size_20,color_FFFFFF,t_70,g_se,x_16)
这种情况就需要先筛选出这些作品编号为空的行,在将数据添加到上一行中。
2020年数据集处理
clean_df_2020 = df_2020.copy()