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

Pandas手动逐行添加DataFrame行报错:TypeError解决方案咨询

问题解决方法

错误原因

itertuples()返回的是namedtuple类型对象,而DataFrame.append()仅支持拼接Series或DataFrame对象,因此触发类型错误。

具体修复方案

方案1:改用iterrows()遍历行(直接获取Series)

iterrows()返回(索引, 行Series)的元组,直接取第二个元素即可用于拼接:

path = "...csv"
data = pd.read_csv(path, na_values='NULL')
path2 = "...csv"
data2 = pd.read_csv(path2, na_values='NULL')

for _, row in data2.iterrows():
    x = input("Do you want to add the row, please write Yes or No")
    if x == 'Yes':
        data = data.append(row, ignore_index=True)  # 加ignore_index避免索引重复
        print(data.shape)
    else:
        pass

方案2:将itertuples()返回的namedtuple转为Series

如果坚持用itertuples(),可以把namedtuple转成字典再转为匹配原DataFrame列的Series:

path = "...csv"
data = pd.read_csv(path, na_values='NULL')
path2 = "...csv"
data2 = pd.read_csv(path2, na_values='NULL')

for row in data2.itertuples():
    x = input("Do you want to add the row, please write Yes or No")
    if x == 'Yes':
        # 转换为对应列的Series
        row_series = pd.Series(row._asdict(), index=data.columns)
        data = data.append(row_series, ignore_index=True)
        print(data.shape)
    else:
        pass

方案3:更高效的批量拼接(推荐)

循环中反复调用append()会频繁创建新DataFrame,效率极低,建议先收集需要添加的行,最后一次性拼接:

path = "...csv"
data = pd.read_csv(path, na_values='NULL')
path2 = "...csv"
data2 = pd.read_csv(path2, na_values='NULL')

rows_to_add = []
for _, row in data2.iterrows():
    x = input("Do you want to add the row, please write Yes or No")
    if x == 'Yes':
        rows_to_add.append(row)

# 批量拼接
if rows_to_add:
    data = pd.concat([data, pd.DataFrame(rows_to_add)], ignore_index=True)
print(data.shape)

注意事项

从pandas 2.0开始,append()方法已被弃用,官方推荐使用pd.concat()进行拼接操作,方案3就是遵循该建议的实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:05:25