使用 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
上面的代码保存了第一行的数据,但是该函数被下一行所干扰,因为您可以看到它不完整......并返回“无法设置具有不匹配列的行”......有什么建议吗?
有两种方法可以解决这个问题:
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 年缺失,我无法判断如何处理这种情况。