使用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)
修正说明
- 用列表收集循环中每一行生成的字典,确保所有行的数据都被保留。
pd.DataFrame()可直接接收字典组成的列表,自动将字典的键设为列名、对应值作为列数据,这比强行用pd.concat()更贴合当前场景,代码也更简洁高效。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

