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

使用pd.concat替代df.append时出现TypeError的解决办法咨询

解决Pandas中pd.concat的TypeError问题

问题背景

原本想用df.append()给DataFrame新增行,结果收到弃用警告:

FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.

改用pd.concat()后又碰到这个报错:

TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid.

出错的代码如下:

df = pd.DataFrame(columns=['locale', 'description']) 
for text in texts:
    df = pd.concat(
        dict(
            locale=text.locale,
            description=text.description
        ),
        ignore_index=True
    )

错误原因

pd.concat()要求传入的是Series或DataFrame对象的序列,但你直接传了普通字典,而且每次循环都把df直接替换成concat的结果,完全没和原DataFrame做合并操作,自然触发类型错误。

可行解决方案

方案1:循环中创建临时DataFrame/Series,逐次合并

每次循环把当前text的数据转成单行DataFrame,再和原df合并:

import pandas as pd

df = pd.DataFrame(columns=['locale', 'description']) 
for text in texts:
    # 把当前text的数据转成单行DataFrame
    temp_df = pd.DataFrame({
        'locale': [text.locale],
        'description': [text.description]
    })
    # 将原df和临时df放在列表中传给concat,完成合并
    df = pd.concat([df, temp_df], ignore_index=True)

也可以用Series实现:

import pandas as pd

df = pd.DataFrame(columns=['locale', 'description']) 
for text in texts:
    temp_series = pd.Series({
        'locale': text.locale,
        'description': text.description
    })
    # 将Series转成单行DataFrame后合并
    df = pd.concat([df, temp_series.to_frame().T], ignore_index=True)

方案2:先收集所有数据,最后一次性合并(推荐)

循环里只把数据存入列表,最后再统一生成DataFrame,数据量大时效率远高于逐次合并:

import pandas as pd

data_list = []
for text in texts:
    data_list.append({
        'locale': text.locale,
        'description': text.description
    })
# 一次性生成目标DataFrame
df = pd.DataFrame(data_list, columns=['locale', 'description'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21