追加数据时数据不完整,出现“无法设置列不匹配的行”的错误

问题描述 投票:0回答:1

使用 python 通过函数抓取数据并附加到数据框。由于声明的数据帧不匹配以及我抓取的数据列中缺少数据,附加功能被破坏。有些我无法收集其余的干净数据。有什么方法可以在解析时跳过不完整数据的执行。有人可以建议我如何解决这个问题并附加其余数据。有关如何在解析 Html 数据时处理此问题的任何建议。

示例数据看起来像这样......

国家(或属地) 2020 2021 2022 2023
阿富汗 20,136 14,941 19,083 23,032
阿尔巴尼亚 15,192 17,984
阿尔及利亚 145,656 163,138 195,060 224,107

我已正确声明数据框,然后使用以下内容附加数据。 GDP_2020是保存的html数据。

       years=['2020','2021','2022','2023']
       GDP=pd.DataFrame(columns=years)        
       for row in GDP_2020[1:]:
           row_data=row.find_all('td')
           individual_row_data=[data.text.strip() for data in row_data]    
           length=len(GDP)
           GDP.loc[length]=individual_row_data 

上面的代码保存了第一行的数据,但是该函数被下一行所干扰,因为您可以看到它不完整......并返回“无法设置具有不匹配列的行”......有什么建议吗?

python html web-scraping beautifulsoup data-analysis
1个回答
0
投票

有两种方法可以解决这个问题:

  1. 如果我们没有 4 年的数据,请跳过数据
  2. np.nan
    添加到数据不可用的行

方法1

years = ['2020','2021','2022','2023']
row_data = []      
for row in GDP_2020[1:]:
    row_data = row.find_all('td')
    individual_row_data = [data.text.strip() for data in row_data]
    if len(individual_row_data) == 4:
        row_data.append(individual_row_data)

GDP = pd.DataFrame(row_data, columns=years)

方法2

years = ['2020','2021','2022','2023']
col_len = len(years)
row_data = []      
for row in GDP_2020[1:]:
    row_data = row.find_all('td')
    individual_row_data = [data.text.strip() for data in row_data]
    row_data.append(individual_row_data + [np.nan] * (col_len - len(individual_row_data)))

GDP = pd.DataFrame(row_data, columns=years)

此外,如果您注意到,我使用列表首先存储所有行数据,然后在最后创建数据框。这比在循环中多次向数据帧添加一行更有效(reference

还有一件事,方法 2 假设缺失的数据来自较晚的年份并且是连续的,即,假设我们有 2020 年、2021 年的数据,但缺失 2022 年和 2023 年的数据。除非我知道数据是如何来自缺失数据的2020 年和 2022 年两年之间的示例数据; 2021 年和 2023 年缺失,我无法判断如何处理这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.