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

使用pd.concat时报错:无法拼接str类型,仅支持Series/DataFrame对象

错误分析与解决:TypeError: 无法连接str类型对象

错误信息

TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid
Traceback (most recent call last):
File "/var/task/etd.py", line 77, in lambda_handler
data = pd.concat(concated_data, ignore_index=True)

问题根源

你的代码存在两个核心问题:

  • concated_data被赋值为单个字典,但pd.concat()要求传入Series或DataFrame的可迭代序列(比如列表)。传入字典时,函数会迭代其键值对,其中的字符串类型值会触发该错误。
  • 循环逻辑错误:concated_data的赋值语句在循环外部,导致它只保留了循环最后一行的数据,完全没收集到之前行的结果。

修正代码

# 初始化空列表,存储每一行的结果字典
concated_data = []
for idx, day_row in curr_df.iterrows():
    av_last_month, rate_end_last_mon = last_months_avs(df_to_date, day_row['From_Currency'], day_row['To_Currency'], day_row['Obs_Date'])
    
    # 将当前行结果组装成字典,添加到列表中
    concated_data.append({
        'Obs_Date': day_row['Obs_Date'], 
        'From_Currency': day_row['From_Currency'], 
        'To_Currency': day_row['To_Currency'], 
        'Rate': day_row['Rate'],
        'PE_Rate': av_last_month, 
        'Mon_End_Rate': rate_end_last_mon
    })

# 直接用字典列表创建DataFrame,无需使用pd.concat
new_df = pd.DataFrame(concated_data)

修正说明

  1. 用列表收集循环中每一行生成的字典,确保所有行的数据都被保留。
  2. pd.DataFrame()可直接接收字典组成的列表,自动将字典的键设为列名、对应值作为列数据,这比强行用pd.concat()更贴合当前场景,代码也更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:29:58