Python爬虫追加DataFrame遇列数不匹配错误的解决方法问询
解决DataFrame追加行时列数不匹配的问题
问题根源
你遇到的报错,是因为抓取到的行数据长度和DataFrame的列数(4列)不一致——比如示例里的Albania行只有2个年份数据,直接赋值就会触发列数不匹配的错误,导致程序中断。
方案1:跳过不完整行,只保留数据完整的条目
在赋值前判断行数据长度是否和DataFrame列数一致,符合条件才追加,否则跳过:
import pandas as pd 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] # 仅当行数据长度和列数匹配时才追加 if len(individual_row_data) == len(GDP.columns): GDP.loc[len(GDP)] = individual_row_data else: # 可选:打印跳过的行,方便后续排查数据问题 print(f"跳过不完整行:{individual_row_data}")
方案2:补全缺失列后保留数据(不丢弃不完整行)
如果不想丢失任何行数据,可以用空值或指定默认值补全到对应列数,再追加:
import pandas as pd 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] # 用空字符串补全缺失的列,也可以换成pd.NA表示空值 padded_data = individual_row_data + ['']*(len(GDP.columns)-len(individual_row_data)) GDP.loc[len(GDP)] = padded_data
额外优化建议
循环里逐行追加DataFrame效率较低,推荐先把所有有效数据收集到列表里,最后一次性生成DataFrame:
import pandas as pd years=['2020','2021','2022','2023'] valid_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) == len(years): valid_data.append(individual_row_data) # 一次性创建DataFrame,效率比循环追加高很多 GDP = pd.DataFrame(valid_data, columns=years)
内容的提问来源于stack exchange,提问作者coderunner84
相关产品推荐
相关产品推荐

