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

使用循环向pandas DataFrame加载数据仅保留最后一次循环值的问题求解

问题分析与修复方案

问题原因

  • 核心逻辑错误:循环内部每次都重新创建pd.DataFrame对象,直接覆盖上一轮循环生成的df,历史爬取数据全部被丢弃
  • 写入逻辑错误:每次循环都执行df.to_csv('pagedata.csv'),该方法默认使用覆盖写入模式,旧的文件内容会被新内容替换,最终仅保留最后一次循环的写入结果
  • 附加语法问题:初始化df时data变量尚未定义,运行会直接报错;重复执行了两次data = [[txt,date1,authors1]]属于冗余代码;使用Python内置关键字list作为循环变量,容易引发命名冲突;目标站点为英文站点,language参数错误设置为德语的de,会降低内容解析准确率。

修复后的代码

import csv
import newspaper
import pandas as pd
from newspaper import Article

# 提前初始化空列表存储所有爬取数据
all_data = []
lista = ['https://www.dawn.com/news/1643189','https://www.dawn.com/news/1648926/former-pakistan-captain-inzamamul-haq-suffers-heart-attack-in-lahore']

# 避免用list作为循环变量名,修改为url
for url in lista:
    first_article = Article(url=url, language='en')
    first_article.download()
    first_article.parse()
    txt = first_article.text
    date1 = first_article.publish_date
    authors1 = first_article.authors
    # 将单条数据追加到总列表中
    all_data.append([txt, date1, authors1])

# 循环结束后统一生成DataFrame并写入csv
df = pd.DataFrame(all_data, columns=['txt','date1','authors1'])
df.to_csv('pagedata.csv', index=False)

修改说明

  • 新增空列表all_data存储所有爬取结果,循环内仅做数据追加,不会覆盖历史数据
  • 把DataFrame实例化和CSV写入操作移到循环外,全量数据采集完成后一次性处理,避免重复覆盖文件
  • 修正了循环变量名、language参数的错误,删除了冗余代码,新增index=False参数避免CSV文件写入多余的索引列。

内容的提问来源于stack exchange,提问作者khawar maqsood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:27:03