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

Pandas FutureWarning求助:列表类传入.loc或[]警告及reindex用法疑问

解决Pandas中append()触发的FutureWarning问题

这个警告的根源很明确:你用append()添加的字典里,缺少了原DataFrame中的B列。Pandas现在只是提前预警,未来版本里这种缺少标签的操作会直接抛出KeyError,而ignore_index参数管的是索引重置,和列的缺失完全没关系,所以不管怎么调它都没用。

另外要提醒一句:Pandas 2.0及以后的版本已经彻底移除了append()方法,所以更建议你改用更规范的方式来合并数据,这里给你几种可行的方案:

方案一:用reindex()对齐列后合并(对应你问的reindex用法)

先把要添加的单行转成DataFrame,再用reindex()对齐原数据的列(缺失的列会自动填充NaN),最后用concat()替代append()完成合并:

import io
import pandas as pd

data = io.StringIO('''A,B,M
AM,1,
AMC,2,
''')
df = pd.read_csv(data)
r=['CAR']
s=['CAR_M']

for i,j in zip(r,s):
    # 构造单行DataFrame
    new_row = pd.DataFrame({'A':[i], 'M':[j]})
    # 对齐原DataFrame的所有列
    new_row_aligned = new_row.reindex(df.columns, axis=1)
    # 合并数据
    df = pd.concat([df, new_row_aligned], ignore_index=True)

方案二:直接补全所有列的内容

如果清楚原DataFrame的所有列,在构造字典时直接给缺失的列赋值NaN(或者pd.NA,推荐后者,更符合Pandas的缺失值规范),这样即使暂时用append()也不会触发警告:

for i,j in zip(r,s):
    df = df.append([{'A':i, 'B':pd.NA, 'M':j}], ignore_index=True)

不过还是更推荐方案一,毕竟append()已经被弃用了。

方案三:批量添加更高效

如果要添加的行不止一条,建议先把所有新行整理成列表,转成DataFrame后一次性合并,比循环里逐行合并效率高得多:

# 批量构造新行的列表
new_rows = [{'A':i, 'M':j} for i,j in zip(r,s)]
# 转成DataFrame并对齐列
new_df = pd.DataFrame(new_rows).reindex(df.columns, axis=1)
# 一次性合并
df = pd.concat([df, new_df], ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:08:29