解决Pandas数据追加中的列不匹配错误:HTML抓取数据处理教程

admin 百科 12

解决Pandas数据追加中的列不匹配错误:HTML抓取数据处理教程

本教程旨在解决使用python抓取html数据并追加到pandas dataframe时,因数据列不匹配导致的“cannot set a row with mismatched columns”错误。文章提供了两种核心策略:一是通过条件判断跳过不完整的数据行;二是用`np.nan`填充缺失列,以确保数据完整性。同时,强调了通过先收集数据再一次性构建dataframe的性能优化方法,提升数据处理效率和代码健壮性。

在进行网页数据抓取(Web Scraping)时,我们经常会遇到HTML表格数据结构不一致的情况。特别是当表格中的某些行缺少部分列数据时,直接将其追加到预定义列数的Pandas DataFrame中会导致“cannot set a row with mismatched columns”错误。这种错误通常发生在尝试将一个长度不匹配的列表赋值给DataFrame的某一行时。

例如,考虑以下数据片段,其中“Albania”一行缺少2022和2023年的数据:

Country (or dependent territory) 2020 2021 2022 2023
Afghanistan                      20,136 14,941 19,083 23,032
Albania                          15,192 17,984
Algeria                          145,656 163,138 195,060 224,107

登录后复制

如果我们的目标DataFrame预设了“2020”、“2021”、“2022”、“2023”这四列,当处理到“Albania”这一行时,由于其只提供了两个数据点,直接使用df.loc[length] = row_data的方式就会引发列不匹配的错误。

解决Pandas数据追加中的列不匹配错误:HTML抓取数据处理教程-第2张图片-佛山资讯网

为了有效地处理这类问题,我们提供两种主要的策略,并结合性能优化建议。

立即学习“前端免费学习笔记(深入)”;

策略一:跳过不完整的数据行

这种方法的核心思想是,在将数据追加到DataFrame之前,先检查当前行的数据长度是否与DataFrame预期的列数完全匹配。如果不匹配,则直接跳过该行数据。这确保了DataFrame中的每一行都具有完整且一致的数据结构。

实现步骤:

  1. 定义DataFrame的列名。
  2. 遍历抓取到的每一行数据。
  3. 提取行中的所有单元格数据。
  4. 检查提取出的数据列表长度是否等于预期的列数。
  5. 如果长度匹配,则将该行数据添加到临时列表中。
  6. 循环结束后,使用收集到的完整数据一次性创建DataFrame。

示例代码:

标签: python html app 数据清洗 优化实践

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~