You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:22:15