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

Pandas替换df.append为pd.concat时遇列表类型错误,求解决方法

解决Pandas append弃用警告及concat报错问题

问题原因

你遇到的报错是因为pd.concat()仅接受Series或DataFrame对象的序列作为参数,而你修改后的代码里tmp列表存储的是普通字符串列表,不符合要求。另外,原代码用df.append()被警告是因为该方法已被弃用,官方推荐使用pd.concat()或一次性构建DataFrame的方式。

最优重写方案(效率最高)

不要在循环中拼接DataFrame,而是先收集所有行数据为字典列表,最后一次性生成DataFrame,这是Pandas官方推荐的高效写法:

# 初始化空列表存储每行数据
rows = []

with response as r:
    items = r.html.find('item', first=False)
    
    for item in items:
        title = item.find('title', first=True).text
        link = item.find('guid', first=True).text
        # 以字典形式存储每行的键值对
        rows.append({'title': title, 'link': link})

# 一次性将列表转为DataFrame,列名可选(字典键已对应列名)
df = pd.DataFrame(rows, columns=['title', 'link'])

若坚持使用pd.concat的写法

如果一定要用pd.concat,需要确保列表中的每个元素都是DataFrame或Series对象:

df_fragments = []

with response as r:
    items = r.html.find('item', first=False)
    
    for item in items:
        title = item.find('title', first=True).text
        link = item.find('guid', first=True).text
        # 将单条数据转为小型DataFrame
        fragment = pd.DataFrame({'title': [title], 'link': [link]})
        df_fragments.append(fragment)

# 拼接所有小型DataFrame,重置索引
df = pd.concat(df_fragments, ignore_index=True)

说明

第一种方案的效率远高于循环拼接,因为Pandas的DataFrame是基于列的存储结构,频繁修改DataFrame会产生大量性能开销,而先收集数据再一次性构建能避免这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:55:19