pd.concat报错:需传入pandas对象可迭代类型,却传入DataFrame
问题解决方法
错误原因
你调用pd.concat时传参错误:该函数要求第一个参数是可迭代的pandas对象集合(比如列表、元组),但你直接传入了两个单独的DataFrame(newdata和emptyframe),导致触发类型错误。
修正代码
根据你“每次添加3列”的需求,需要将待拼接的对象放入列表,并指定axis=1(按列拼接,即新增列):
import pandas as pd emptyframe = pd.DataFrame() for j in range(len(df.columns)): # 拼接当前索引对应的3列 newdata = pd.concat([newdf.iloc[:, j], happydf.iloc[:, j], motivedf.iloc[:, j]], axis=1) # 将新生成的3列拼接到emptyframe右侧 emptyframe = pd.concat([emptyframe, newdata], axis=1) print(emptyframe)
额外优化提示
循环中反复调用pd.concat会产生性能损耗,推荐一次性收集所有需要拼接的列,再统一执行拼接:
import pandas as pd # 收集所有要拼接的列 all_columns = [] for j in range(len(df.columns)): all_columns.extend([newdf.iloc[:, j], happydf.iloc[:, j], motivedf.iloc[:, j]]) # 一次性拼接所有列 emptyframe = pd.concat(all_columns, axis=1)
或者用更简洁的列表推导式:
emptyframe = pd.concat( [col_df.iloc[:, j] for j in range(len(df.columns)) for col_df in [newdf, happydf, motivedf]], axis=1 )
注意点
- 用
iloc[:, j]代替loc[:, j]:因为j是位置索引,iloc专门用于基于位置的列/行定位,避免列标签非整数时出现匹配错误。
内容的提问来源于stack exchange,提问作者Caledonian26
相关产品推荐
相关产品推荐

